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

Mid*_*orm 5 node.js npm npm-install npm-scripts

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

我已经尝试过诸如使用不赞成使用的prepublish钩子之类的方法,即使这样也不会被调用。我还尝试做postinstall一下看是否可以在安装后进行构建,但是该钩子确实被称为失败,因为未安装devDependencies

package.json

{
  "name": "common-components",
  "version": "0.1.0",
  "scripts": {
    "prepare": "npm run build",
    "build": "ng build",
    ...
  },
  "private": true,
  "dependencies": {
    ...
  },
  "devDependencies": {
    ...
  },
}
Run Code Online (Sandbox Code Playgroud)

用于安装的命令

npm install --save git+ssh://{URL-to-common-components-repo}}
Run Code Online (Sandbox Code Playgroud)

我已经通读了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,它应该根据错误工作

Mid*_*orm 8

对于那些想知道其现状的人。我无法让它发挥作用。我最终所做的是将组件托管在私有 npm 注册表上,并且效果很好,因为该npm publish命令将执行构建并仅发布 dist 文件夹

  • 到了 2021 年……仍然是一片混乱。`prepare` 脚本被详细记录为设置 git 依赖项的正确解决方案。但它永远不会运行... (9认同)
  • 有些事情需要改变。过去几年我遇到的每个 npm 问题的每个解决方案都将其放在 npm 注册表中。 (7认同)

Fiv*_*ive 5

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

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

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

  • 很好,就是这样。 (3认同)
  • 哇。真是一个发现。我不确定我是否同意默认的“使用 gitignore”方法,特别是在人们希望 /dist 在 git 中被忽略但在 npm 中永远不会被忽略的情况下。 (2认同)