发布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
的 files
部分,这意味着这些文件对包很重要 - 为什么 .gitignore
他们?
最佳答案
让我们首先了解有关此项目的“构建”和“发布”步骤的更多信息...
如果您检查项目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
命令。
运行npmpublish...
后,会发生以下步骤:
package.json
中定义的prepublish
脚本(称为pre
hook )会自动被调用并运行build
脚本。build
脚本本质上利用 babel-cli用于开始转译项目源代码的过程的工具(即源代码是您在项目 GitHub 存储库中看到的内容)。生成的转译代码将发布到 npm。注意:在
build
脚本中,输出文件保存到dist
和dist/lib
文件夹中。
上述步骤(1 和 2)发生在 npmpublish...
命令将包发布到 npm 之前。
The question is why does the project on Github ignore the files while npm has to contain them?
让我们解决问题中的“为什么 Github 上的项目会忽略这些文件”部分:
保存到
dist
文件夹的文件是根据上述步骤 1 和 2 自动从源代码生成的。生成“构建”文件的过程是可重复的。此“构建”过程的结果文件输出是源代码文件的派生物。
本质上,没有理由将“build”文件(即自动生成到
dist
文件夹的文件)推送到GitHub 存储库,因为项目维护者知道他们可以通过运行 npmbuild
脚本简单地从源代码重新生成衍生版本。
让我们尝试解决问题中的“...而 npm 必须包含它们”部分:
- npm 必须包含
dist
文件夹中的文件,因为它们本质上是发布到 npm 注册表的文件。
- npm 必须包含
关于node.js - 发布nodejs包时,有些文件上传到npm但没有上传到Github。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59387174/