我应该在npm上发布模块的源代码吗?
我希望这个问题不要太过分,我在问最好的/常见的做法。
我发布了一个用ES6编写的npm模块,并使用babel和rollup转换为ES5和UMD。
文件结构可以总结如下:
/coverage/ /dist/ /node_modules/ /src/ /test/ /tools/ .editorconfig .eslintrc .gitattributes .gitignore .travis.yml CHANGELOG.md CONTRIBUTING.md LICENSE.txt package.json README.md
源代码位于/src/
,编译后的代码位于/dist/
。
这些dirs是.gitignored:
- 覆盖
- DIST
- node_modules
用户真正使用的确实是/dist/
的内容。
我一直在使用一个构build过程的入门工具包:
- 拿原来的
package.json
- 从中删除所有的脚本和开发相关的领域
- 将其复制到dist
- 还将文件LICENSE和README复制到远程(未触及)
整个软件包源将在GitHub上发布,但我不确定在npm上发布什么 :
A)具有顶层package.json
的整个文件结构(去除/coverage/
和/node_modules/
),该入口指向dist
的相关文件
要么
B)只需发布一个精简的package.json
和README&LICENSE的dist
内容。 我知道只是发布/dist
的内容会使源映射无用。
这里常见的做法是什么?
通常的做法是在npm上有一个源代码,而不是编译/缩小等的结果。 首先发布不需要任何转换的模块也是很常见的。
如果您的模块无法直接在Node中使用(如果npm上的模块是非常不寻常的,当然也不是这样),那么您必须确保在安装过程中转换模块(这是非常棘手的,可能会损坏用户的文件系统如果做错了)或将dist
包含在已发布的模块中。
如果你打算在已发布的模块中包含dist
,那么你需要确保当人们需要你的模块时加载正确的文件,并且在做npm version
和npm publish
之前总是build立一个新的dist
。
但是,我的build议是在Node中编写节点模块。 这样他们将可以直接使用小的下载,快速安装,没有问题与转发和可读的错误消息 – 最后一部分是非常重要的debugging过程中。
发布经常被忽略的传输代码存在一个严重的问题。 发布与实际源代码不同的代码,无论是以任何方式进行转译,缩小或混淆,都会产生一些安全隐患。 审核转录结果是非常困难的,如果这是实际运行的代码(特别是如果你自己没有编译的话),你必须这样做。