提问者:小点点

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


当发布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它们?


共1个答案

匿名用户

让我们首先了解更多关于这个项目的“构建”和“发布”步骤。。。

如果您检查项目包。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(被称为prehook)自动被调用,并运行build脚本。

    build脚本基本上利用babel cli工具开始传输项目源代码的过程(即,源代码就是您在项目GitHub repo中看到的)。生成的传输代码就是发布到npm的代码。

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

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

    问题是为什么Github上的项目会忽略这些文件,而npm必须包含它们?

    >

  • 让我们谈谈您问题中的“为什么Github上的项目忽略了文件”部分:

    >

    生成“生成”文件的过程是可重复的。这个“构建”过程的结果文件输出是源代码文件的派生。

    基本上,没有理由将“构建”文件(即自动生成到dist文件夹的文件)推送到GitHub repo,因为项目维护人员知道他们可以通过运行npmbuild脚本从源代码重新生成衍生版本。

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

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