Leo*_*rdo 13 javascript node.js npm ecmascript-6 babeljs
我希望这个问题不会过于自以为是,我要问的是最佳/普遍的做法.
我正在发布一个用ES6编写的npm模块,并使用babel和汇总转换为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
Run Code Online (Sandbox Code Playgroud)
源代码在其中/src/,编译代码在/dist/.
这些目录是.gitignored:
用户真正使用的确是内容/dist/.
我一直在使用带有构建过程的入门套件:
package.json 整个包源将在GitHub上发布,但我不确定在npm上发布什么:
A)整个文件结构(删除/coverage/和/node_modules/),顶层package.json具有相关文件的入口点dist
要么
B)只发布dist精简内容package.json和README&LICENSE.我知道只是发布内容/dist会使源地图无效.
这里的常见做法是什么?
Jyo*_*Pal 11
在我看来,最好的做法是在dist文件夹中发布缩小的代码以及在文件夹中发布源代码src。人们还应该包括其他文件,例如package.json,package-lock.json,README.md,LICENSE.txt,CONTRIBUTING.md,等,这是在根目录包。
为了实现这一点,应该使用files属性 inpackage.json将需要发布的内容列入白名单,npm而不是通过将 in 列入黑名单来查找不需要发布的内容.npmignore。
该dist文件夹应该只有缩小的包,不需要package.json通过删除脚本devDependencies等在 dist 文件夹中生成另一个。
这是因为当包的使用者 do 时npm install <package name>,它只安装里面的包dependencies而忽略devDependecies.
浏览器可以通过直接从脚本标签引用来使用缩小的文件,其中由于文件大小小,加载时间会更短,而现代框架(例如angular将使用未缩小的代码)。现代框架有自己的构建工具,比如webpack/rollup可以创建一个缩小的包文件。
有没有需要有一个顶层package.json已在切入点main领域中的相关文件dist。相反,在我看来,顶级package.json应该有相关文件的入口点,例如index.js在相同的根包级别。
最后,您可以运行npm pack以查看 tarball 中的内容,然后最后npm publish从根包文件夹中对 npm 注册表进行公共使用。
常见的做法是在 npm 上拥有源代码,而不是转译/压缩等的结果。发布一开始就不需要任何转译的模块也很常见。
如果你的模块不能在没有转译的情况下直接在 Node 中使用(这对于 npm 上的模块来说是非常不寻常的,当然不是预期的),那么你要么必须确保它在安装过程中被转译(这很棘手,并且可能会损坏用户的文件系统)如果做错了)或将其包含dist在您发布的模块中。
如果您打算将 包含dist在已发布的模块中,那么您需要确保当人们需要您的模块时加载正确的文件,并且您始终在dist执行npm version和之前构建一个新的文件npm publish。
不过,我的建议是在 Node.js 中编写 Node 模块。这样,它们就可以直接使用,下载量小,安装速度快,没有转译问题,并且错误消息可读 - 最后一部分在调试过程中非常重要。
发布转译代码有一个经常被忽视的严重问题。发布与实际源代码有任何不同的代码,无论是以任何方式进行转译、缩小或混淆,都会产生一些安全隐患。审核转译结果非常困难,如果这是实际运行的代码(特别是如果您没有自己转译它),则必须这样做。
| 归档时间: |
|
| 查看次数: |
1990 次 |
| 最近记录: |