当发布nodejs包时,一些文件上传到npm,但没有上传到Github。为什么啊?
例如,包是资产网页包插件
。
在其包的文件
部分。json它包括dist/
:
"files": [
"index.js",
"dist/"
],
但是在. gitignore
文件中,它仍然包含dist
:
node_modules
dist
tmp
npm-debug.log*
.package.json
# Lock files shouldn't be committed for libraries https://stackoverflow.com/a/40206145
yarn.lock
package-lock.json
问题是为什么Github上的项目忽略文件,而npm必须包含它们?现在它们在package.json
的文件
部分,这意味着这些文件对包很重要-为什么. gitignore
它们?
让我们首先了解更多关于这个项目的“构建”和“发布”步骤。。。
如果您检查项目包。json文件它包含与您的问题相关的scripts
部分中定义的以下两个脚本:
"scripts": {
...
"build": "babel index.js --out-dir dist && babel lib --out-dir dist/lib",
"prepublish": "npm run build"
},
当资产-webpack-plugin
的维护者将包发布到npm时,他们使用npm发布
命令。
运行npm发布时代码>执行以下步骤:
>
包中定义的
预发布
脚本。json(被称为pre
hook)自动被调用,并运行build
脚本。
build
脚本基本上利用babel cli工具开始传输项目源代码的过程(即,源代码就是您在项目GitHub repo中看到的)。生成的传输代码就是发布到npm的代码。
注意:在build
脚本中,输出文件保存到dist
和dist/lib
文件夹中。
上述步骤(1和2)发生在npm发布之前代码>命令将包发布到npm。
问题是为什么Github上的项目会忽略这些文件,而npm必须包含它们?
>
让我们谈谈您问题中的“为什么Github上的项目忽略了文件”部分:
>
生成“生成”文件的过程是可重复的。这个“构建”过程的结果文件输出是源代码文件的派生。
基本上,没有理由将“构建”文件(即自动生成到dist
文件夹的文件)推送到GitHub repo,因为项目维护人员知道他们可以通过运行npmbuild
脚本从源代码重新生成衍生版本。
让我们试着解决“...而npm必须包含它们”你问题的一部分:
dist
文件夹中,因为它们本质上是发布到npm注册表的文件李>