我是否应该试试我的testing?
我应该把什么东西放在.npmignore
?
testing? 东西像.travis.yml
, .jshintrc
? 运行模块时什么都不需要(自述除外)?
我找不到任何指导。
正如你可能发现的那样,NPM并没有具体说明那里应该做什么,而是有一个被忽略的默认文件列表 。 如果.npmignore
不存在,许多人甚至不使用它作为.gitignore
所有内容。 此外,无论设置如何,许多文件在默认情况下都已被忽略,并且一些文件总是被忽略,如上面的链接所述。
没有太多官方的东西总是应该在那里,因为它基本上是.gitignore
一个子集,但是从我使用node收集5年的时间,这是我想到的。
注意: 生产是指任何时候你的模块被某人使用,而不是在模块本身上进行开发。
预发布交叉编译的来源
优点 :如果你正在使用一种交叉编译成JavaScript的语言,你可以在发布之前进行预编译,并且不要在你的包中包含.coffee
文件,而是继续在你的git仓库中跟踪它们。
build立文件剩菜
优点 :使用像node-gyp
这样的东西的用户可能会在构build过程中生成一些永远不会进入包的对象文件。 缺点 :无论如何,这应该总是进入.gitignore
。 如果您使用.npmignore
文件,则必须将这些内容放在这里,因为它从npm的angular度覆盖.gitignore
。
testing
优点 :生产代码中的行李less了。 缺点 :你不能在实时环境中运行testing,因为很less有系统特定的故障,比如过期的节点运行版本,导致testing失败。
持续集成设置/元文件
优点 :再次,减less行李。 诸如.travis.yml
类的东西不是使用,testing或查看代码所必需的。
非自述文档和代码示例
优点 :减less行李。 有些人存在于思维stream派中,如果你的自述文件中至less没有可行的function,那么你的模块太大了。 缺点 :人们无法在自己的文件系统上看到详尽的文档和代码示例。 他们将不得不访问存储库(这也需要互联网连接)。
Github页面对象
优点 :如果您使用模块作为gh-pages
存储库的双重职责,您当然不需要使用CNAME
文件或占位符index.html
来散布您的版本。
bower.json和朋友
优点 :如果您决定在发布之前构build您的依赖关系,则不需要最终用户安装bower,然后安装更多的东西。 我会亲自把这些东西放在包里。 当我做一个npm install
,我应该只依靠npm而不是其他的外部源。
基本上,你应该永远使用它,如果有什么你想保持你的NPM包,但不是你的NPM存储库。 这不是一个长长的项目列表,但是npm宁愿build立在function上,而不是让人们在他们的封装中粘住不相关的对象。
我同意兰特的简短答案和SamT的大答案 :
- 你不应该在你的软件包中包含你的testing。
- 您的软件包应该只包含生产运行时文件。
- 这将使您的软件包更简单,更快速地下载。
我对这些答案的贡献:
.npmignore是实现包文件select的黑名单方式。 但是更实际的方法是,您可以使用 package.json中的files字段将需要包含在文件包中的文件 列入白名单 :
{ "files": [ "lib/", "index.js" ] }
我认为这样更简单,有前途,并且有更好的语义;)
只是为了澄清,任何时候有人做npm install your-library
, npm将下载回购包括的所有源文件,除了你在.npmignore
包含的文件。
知道安装你的库的人只需要你的库运行,其他任何东西都不是必需的。
例如,当某人安装一个库时,可能他/她不关心你的.travis.yml
或你的.jshintrc
文件,甚至是一些图像,Grunt文件,文档等等。
.npmignore
可以让你的npm包有更less的文件,更快的被下载