共计 3016 个字符,预计需要花费 8 分钟才能阅读完成。
引子
在 npm Getting started 之后,发现了 npm-developers 这篇文档,介绍从开始、本地测试、打包到公布的一个绝对残缺的流程。感觉是 Getting started 的一个补充,于是就把篇文档翻译成中文,加深下印象。
原文:npm-developers。
- Origin
- My GitHub
简述
所以,你曾经打算应用 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-foo 和 bar-js 是不好的命名。foo 和 bar 的命名会更好。 - 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 命令,这个命令将在工作目录生成一个压缩包,公布包也是应用这种形式。
Link 包
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 公布。
参考资料
- npm-developers