从回购中安装Npm不能运行`prepare`

时间:2019-05-06 19:44:10

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

我有一个用于内部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钩子

更新5/6/2019

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

我正在使用npm 6.4.1,该版本应该可以根据错误进行操作

4 个答案:

答案 0 :(得分:3)

最近要检查一个软件包的一件事-如果有.gitignore而不是.npmignore,则npm可能会忽略您的/ dist文件夹。在这种情况下,添加一个空的.npmignore即可。

”如果没有.npmignore文件,但是有.gitignore文件,则 npm将忽略与.gitignore文件匹配的内容。如果你想 包括.gitignore文件中排除的内容,您可以 创建一个空的.npmignore文件以覆盖它。”

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

答案 1 :(得分:0)

对于那些对此表示怀疑的人。我无法使它正常工作。我最终要做的是将组件托管在私有npm注册表上,并且工作正常,因为npm publish命令将完成构建并仅发布dist文件夹

答案 2 :(得分:0)

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

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

node v14.15.4 npm 6.14.11

答案 3 :(得分:0)

如果添加一个空的 .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