发布nodejs软件包时,某些文件会上载到npm,但不会上载到Github。为什么?

时间:2019-12-18 07:18:53

标签: node.js github npm

发布nodejs软件包时,某些文件会上传到npm,但不会上传到Github。为什么?

例如,程序包为assets-webpack-plugin

在其package.jsonfiles部分中,它包含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它们呢?

1 个答案:

答案 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 ...后,将发生以下步骤:

  1. prepublish中定义的package.json脚本(称为pre hook)将自动被调用并运行build脚本。

  2. build脚本实质上是利用babel-cli工具来开始编译项目源代码的过程(即源代码就是您在项目GitHub存储库中看到的代码)。最终的已编译代码将发布到npm。

    注意:在build脚本中,输出文件被保存到distdist/lib文件夹中。

上述步骤(1和2)发生在npm publish ...命令将程序包发布到npm之前。


  

问题是为什么Github上的项目为什么在npm必须包含文件的情况下忽略文件?

  1. 让我们解决问题的“为什么Github上的项目会忽略文件”

    • 根据上述步骤1和2,会自动从源代码生成保存到dist文件夹中的文件。

    • 生成“内部版本” 文件的过程是可重复的。此“ build” 过程的结果文件输出是源代码文件的派生。

    • 基本上,没有理由将“ build” 文件(即自动生成到dist文件夹的文件)推送到GitHub存储库,因为项目维护者知道他们可以通过运行npm build脚本从源代码中简单地重新生成派生版本。

  2. 让我们尝试解决“ ...而npm必须包含它们” 问题的一部分:

    • npm必须将文件包含在dist文件夹中,因为它们本质上是发布到npm注册表中的文件。