• npm developer guide


    目录

    引子

    npm Getting started 之后,发现了 npm-developers 这篇文档,介绍从开始、本地测试、打包到发布的一个相对完整的流程。感觉是 Getting started 的一个补充,于是就把篇文档翻译成中文,加深下印象。

    原文:npm-developers

    简述

    所以,你已经打算使用 npm 来开发(并且可能发布或部署)你的项目了。

    太棒了!

    在你的用户安装程序的简单步骤之上,您需要做一些事情。

    关于这些文档

    这些是手册页。如果你安装了 npm,你应该可以在 npm 手册中找到特定主题的文档,或者通过 npm 帮助来获取相同的信息。

    一个 package 是什么

    一个 package 是:

    1. 一个包含了描述程序的 package.json 文件的文件夹。
    2. 包含有一个 gzip 压缩的压缩包(在 1 的基础上)。
    3. 一个解析为(2)中包的 url。
    4. 一个已经在登记处发布的 <name>@<version>(在 3 的基础上)。
    5. 一个指向的(4)的 <name>@<tag>。
    6. 一个满意的有 “latest” 标签的 <name>(在 5 的基础上)。
    7. 一个克隆的 git 仓库链接,指向(1)中的文件夹。
    

    即使你从来没有发布过你的包,如果你只是想写一个 node 项目,或者在打包成压缩包后,你想在其它地方能很容易的安装,你仍然可以从使用 npm 中受益匪浅。

    Git 的链接可是下面的一些形式:

    git://github.com/user/project.git#commit-ish
    git+ssh://user@hostname:project.git#commit-ish
    git+http://user@hostname/project/blah.git#commit-ish
    git+https://user@hostname/project/blah.git#commit-ish
    

    commit-ish 可以是任何的 tag、sha 或者能够提供给 git checkout 作为参数的分支名。默认值是 master

    package.json 文件

    你需要在项目根目录下有个 package.json 文件,这样才能用 npm 做很多事情。这基本上就是整个交接口。

    详细的文件信息,可见 package.json。你至少需要知道的有:

    • name:这个应该是标识你项目的字符串。请不要使用 name 来指明这个项目是基于 node 或者使用了 JavaScript。你可以用 “engines” 字段来表明你项目,需要什么版本的 node(或者其它什么),它几乎假设是 JavaScript。
      也不需要匹配你的 github 库的名称。
      因此,node-foobar-js 是不好的命名。foobar 的命名会更好。
    • version:semver 兼容版本。
    • engines:指明你的项目基于那个版本 node(或其它什么) 运行。node API 改变很频繁,你依赖的版本,可能有一些 bug 或新的功能。明确的指出来。
    • author:作者。
    • scripts:如果你有特定的编译或安装脚本,那么你应该把它放到 scripts 对象中。你应该至少有一个基本的 smoke test 命令作为 “scripts.test” 字段。见 npm-scripts
    • main:如果你有一个单独的模块作为你程序的入口(就像 “foo” 包通过 requre("foo") 获取),那么你需要在 “main” 字段指明。
    • directories:这是一个映射名称到文件夹的对象。最好包括 “lib” 和 “doc”,但是如果你使用 “man” 指定一个满是手册页的文件夹,它们将会像安装这些手册页一样进行安装。

    你可以在你项目的根目录下,使用 npm init 初始化基本的 package.json 文件。更多信息见 npm-init

    过滤文件

    使用 .npmignore 文件排除包中的一些东西。如果没有 .npmignore 文件,但有 .gitignore 文件,那么 npm 将忽略该文件中匹配到的东西。如果你想包含你 .gitignore 文件中排除的文件,你可以创建一个空的 .npmignore 文件覆盖它。与 git 一样,npm 在包的所有子目录中查找 .npmignore.gitignore 文件,而不仅仅是根目录。

    .npmignore.gitignore 遵循相同的规则模式:

    • # 开始的行会被忽略。
    • 标准的全局模式有效。
    • 你可以使用正斜杠结束模式 / 指定目录。
    • 你可以通过使用感叹号 !来否定一个模式。

    默认的,下面的路径和文件会被忽略,因此不需要额外将这些添加到 .npmignore 中:

    • .*.swp
    • ._*
    • .DS_Store
    • .git
    • .hg
    • .npmrc
    • .lock-wscript
    • .svn
    • .wafpickle-*
    • config.gypi
    • CVS
    • npm-debug.log

    此外,node_module 中所有的东西会被忽略,除了绑定的依赖。npm 会自动为你处理这个。所以不必将 node_module 加入到 .npmignore 中。

    下面的路径和文件绝不会被忽略,所以把这些加入到 .npmignore 中没有意义:

    • package.json
    • README (and its variants)
    • CHANGELOG (and its variants)
    • LICENSE / LICENCE

    如果考虑到项目的结构,你发现 .npmignore 是一个维护难题,那么可以尝试填充 package.json 文件的 files 属性,该属性是一个数组,里面是应该包含在包中的文件或目录名。有时候白名单比黑名单更容易管理。

    测试你的 .npmignore 或文件配置是否有效

    如果你想要再次确认,当发布时,你想要的都包含在包中,你可以本地运行 npm pack 命令,这个命令将在工作目录生成一个压缩包,发布包也是使用这种方式。

    npm link 旨在安装一个开发包并实时查看更改,而不用再次重新安装。(当然,你需要重新 link 或 npm rebuidl -g 来更新编译的包。)

    实际操作见本地包调试 :npm link ,文档信息见 npm-link

    发布之前:确保你的包可正常安装运行

    这很重要。

    如果你的包不能本地安装,你试图发布它,将会有问题。或者更糟糕的是,你能发布,但发布了一个破损或者无意义的包。所以不要这样做。

    在你包的根目录下,执行下面命令:

    npm install . -g
    

    这将会告诉你是否可行。如果你更喜欢创建一个 link 的包,指向你的工作目录,那么这么做:

    npm link
    

    使用 npm ls -g 查看是否存在。

    测试本地安装,到另外一个文件夹下,执行:

    cd ../some-other-folder
    npm install ../my-package
    

    在其它地方,本地安装到 node_module 文件夹下。

    然后进入 node-repl,尝试使用 require(“my-thing”)引入你模块的主模块。

    创建一个用户账户

    通过 adducer 命令创建一个用户。像这样运行:

    npm adduser
    

    之后就根据提示进行。详细见 npm-adduser

    发布你的包

    这部分很简单。到你文件夹根目录下,执行这个:

    npm publish
    

    你可以给一个压缩包,一个压缩包的文件名,或者一个文件夹的路径发布一个 url。

    请注意,默认情况下,文件夹里面几乎所有的内容将会被公开。所以,如果你在里面有秘密的东西,使用一个 .npmignore 文件列出要全局忽略的东西,或者从一个新的 checkout 发布。

    参考资料

  • 相关阅读:
    配置YUM源出现Errno 14 Could not open/read repomd.xml 错误的解决办法
    Kubernetes imagePullPolicy拉取策略
    搭建高可用Kubernetes集群之etcd v3.4.13集群搭建(一)
    centos7启用 kubectl 自动补全
    jvm虚拟机
    音频EQ(均衡器)
    EDID:识别和解决常见问题指南(转)
    按键板的原理与实现 扩展GPIO(转)
    Tuner工作原理详解(转)
    STM32+W5500实现Web2个网页之间的切换(转)
  • 原文地址:https://www.cnblogs.com/thyshare/p/13946802.html
Copyright © 2020-2023  润新知