【问题标题】:Npm install from repo not running `prepare`从 repo 安装的 Npm 未运行“准备”
【发布时间】:2019-09-24 10:58:21
【问题描述】:

我有一个用于托管在内部 git 服务器上的通用组件的 npm 包。出于某种原因,当我在另一个项目中调用npm install 时,我想在其中使用它,它不会运行prepare 钩子。显然,这不起作用,因为 npm 包需要 node_modules 中的 /dist 文件夹才能使用该包。

我已经尝试过诸如使用已弃用的 prepublish 钩子之类的方法,即使这样也没有被调用。我还尝试做postinstall 看看我是否可以在安装后构建,而那个钩子确实被调用它失败了,因为没有安装 devDependencies

package.json

{
  "name": "common-components",
  "version": "0.1.0",
  "scripts": {
    "prepare": "npm run build",
    "build": "ng build",
    ...
  },
  "private": true,
  "dependencies": {
    ...
  },
  "devDependencies": {
    ...
  },
}

用于安装的命令

npm install --save git+ssh://{URL-to-common-components-repo}}

我已经彻底阅读了 npm-scripts 文档 https://docs.npmjs.com/misc/scripts,似乎他们坚持应该始终为这个确切的用例调用 prepare 钩子

2019 年 5 月 6 日更新

我在 NPM 社区 https://npm.community/t/using-npm-ci-does-not-run-prepare-script-for-git-modules/632/4 上发现了这个错误。

我正在使用 npm 6.4.1,它应该可以根据错误工作

【问题讨论】:

    标签: node.js npm npm-install npm-scripts


    【解决方案1】:

    如果添加一个空的.npmignore 没有帮助,您可以尝试在package.json#files 中明确指定dist 中的所有文件。如果这可行,您可能需要考虑使用与 dist 中的文件匹配的通配符模式来简化 package.json

    package.json

        ...
        "files": [
            "source",
            "dist/cjs/main.js",
            "dist/es/main.js"
        ]
    }
    

    在 npm/cli 存储库 https://github.com/npm/cli/issues/1287#issuecomment-635021757 中查看此对类似问题的评论

    【讨论】:

      【解决方案2】:

      在 package.json 中添加 main 为我解决了这个问题。

          "main": "./dist/index.js",
          "scripts": {
             "build": "babel src --out-dir dist",
             "prepare": "npm run build",
             "lint": "eslint ."
           },
      

      node v14.15.4npm 6.14.11

      【讨论】:

        【解决方案3】:

        最近要检查的一件事是让我在一个包上遇到问题 - 如果有 .gitignore 而不是 .npmignore,npm 可能会忽略您的 /dist 文件夹。在这种情况下,添加一个空的 .npmignore 是可行的。

        "如果没有.npmignore文件,但是有.gitignore文件,那么 npm 将忽略 .gitignore 文件匹配的内容。如果你想 要包含 .gitignore 文件排除的内容,您可以 创建一个空的 .npmignore 文件来覆盖它。”

        来自https://docs.npmjs.com/misc/developers

        【讨论】:

        • 很好,就是这样。
        【解决方案4】:

        对于那些想知道此状态的人。我无法让它工作。我最终做的是将组件托管在私有 npm 注册表上,并且工作正常,因为 npm publish 命令将进行构建并仅发布 dist 文件夹

        【讨论】:

        • 有些事情需要改变。过去几年我遇到的每一个 npm 问题的每一个解决方案都放在 npm 注册表中。
        • 2021 年......它仍然是一个混乱。 prepare 脚本被详细记录为设置 git 依赖项的正确解决方案。但它永远不会运行......
        猜你喜欢
        • 2014-09-19
        • 1970-01-01
        • 1970-01-01
        • 2019-08-18
        • 2016-07-09
        • 2018-05-24
        • 2019-08-03
        • 2018-01-08
        • 1970-01-01
        相关资源
        最近更新 更多