发布nodejs软件包时,某些文件会上传到npm,但不会上传到Github。为什么?
例如,程序包为assets-webpack-plugin
。
在其package.json的files
部分中,它包含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
的{{1}}部分中,这意味着这些文件对软件包很重要-为什么files
它们呢?
答案 0 :(得分:0)
首先让我们进一步了解该项目的“构建” 和“发布” 步骤...
如果您检查项目package.json文件,则该文件包含scripts
部分中定义的与您的问题有关的以下两个脚本:
"scripts": { ... "build": "babel index.js --out-dir dist && babel lib --out-dir dist/lib", "prepublish": "npm run build" },
assets-webpack-plugin
的维护者将软件包发布到npm时,他们将使用npm publish
命令。
运行npm publish ...
后,将发生以下步骤:
在prepublish
中定义的package.json
脚本(称为pre
hook)将自动被调用并运行build
脚本。
build
脚本实质上是利用babel-cli工具来开始编译项目源代码的过程(即源代码就是您在项目GitHub存储库中看到的代码)。最终的已编译代码将发布到npm。
注意:在build
脚本中,输出文件被保存到dist
和dist/lib
文件夹中。
上述步骤(1和2)发生在npm publish ...
命令将程序包发布到npm之前。
问题是为什么Github上的项目为什么在npm必须包含文件的情况下忽略文件?
让我们解决问题的“为什么Github上的项目会忽略文件” :
根据上述步骤1和2,会自动从源代码生成保存到dist
文件夹中的文件。
生成“内部版本” 文件的过程是可重复的。此“ build” 过程的结果文件输出是源代码文件的派生。
基本上,没有理由将“ build” 文件(即自动生成到dist
文件夹的文件)推送到GitHub存储库,因为项目维护者知道他们可以通过运行npm build
脚本从源代码中简单地重新生成派生版本。
让我们尝试解决“ ...而npm必须包含它们” 问题的一部分:
dist
文件夹中,因为它们本质上是发布到npm注册表中的文件。