【问题标题】:npm postinstall runs only when not installing anythingnpm postinstall 仅在不安装任何东西时运行
【发布时间】:2020-05-31 05:23:43
【问题描述】:

我错了

npm install whatever 删除node_modules/- 文件夹的原因不同:我以为它运行preinstall 但没有postinstall,我错了。

我没有运行这两个脚本。

原因似乎是npm install whatever删除我的package.json 中未提及的所有包。有趣的是,它没有安装在我的package.json 中提到但在node_modules 中缺少的包。就像迈克尔沃德尔在评论中写的一样。这对我来说毫无意义,但是....


this comment 之后,我切换到绝对导入并依赖 postinstall(在我自己的 package.json 中)来创建链接

{
  "scripts": {
    "preinstall": "rm node_modules/-",
    "postinstall": "ln -s `pwd`/src node_modules/-",
    ...
  },
}

它工作得很好,除非我真的安装了一些东西。与

npm install

链接被删除然后重新创建。然而,随着

npm install whatever

链接被删除,但没有重新创建。这是一个错误还是故意的,我应该使用其他一些“postinstall”?

请注意,我并不担心丢失我的src 目录。那是一个不同的问题。我的问题是“postinstall”只是有时运行。

更新

人们评论说,只有在不带任何参数的情况下运行 npm install 时才会运行挂钩。我可以忍受,但事实并非如此:

> ls -l node_modules/-
lrwxrwxrwx 1 maaartinus maaartinus 40 May 29 11:53 node_modules/- -> /home/maaartinus/work/octopus/reocto/src

> npm i whatever
foo bar baz blah

> ls -l node_modules/-
ls: cannot access 'node_modules/-': No such file or directory

这意味着preinstall 运行,但postinstall 没有运行。这听起来像一个错误......

> node -v
v12.16.3
> npm -v
6.13.4

更新 2

安装前和安装后脚本在我自己的package.json中(可以从上下文中理解,但我应该说清楚)。

【问题讨论】:

  • 我认为您应该检查此链接以使用绝对路径而不删除任何文件..." github.com/facebook/create-react-app/issues/… " ...您提到的链接有一些缺点,您可以在 github 中看到.
  • @PALLAMOLLASAI 我不担心这个设置很危险 - 我知道通过符号链接清理 src 目录的问题(一个愚蠢的老错误,希望同时解决),但我承诺很多时候,所以可能的伤害是有限的。所有智能解决方案的问题在于,react/CRA 都不支持它们。 它们随时可能损坏。
  • 难道 postinstall 应该在您安装当前软件包时运行,而不是在您安装其他软件包时运行?
  • 安装前和安装后脚本仅在您执行“npm install”时运行 - 安装模块时无法运行它们(请参阅stackoverflow.com/a/46729184/1238190)。并非“预安装”脚本正在运行但“后安装”脚本未运行。安装一个模块会告诉 npm “清理”文件夹。我的建议是创建一个执行所有 3 个步骤的 shell 脚本(例如 npm_install.sh)并使用它而不是调用“npm install module”
  • @MichaelWaddell 你是对的(我花了一段时间才理解它)。随意投票以重复关闭。

标签: reactjs npm post-install


【解决方案1】:

有时节点由于某种原因currpted,因此删除了node_module文件夹。你可以通过纱线安装任何东西

yarn add whatever

preinstall & postinstall

preinstall:在安装包之前运行安装

postinstall:安装包后运行。

绝对路径:

通过

安装babel-plugin-module-resolver
yarn add -D babel-plugin-module-resolver
yarn add -D customize-cra

然后像这样在babel.config.js文件中添加相对路径

const { override, addBabelPlugins } = require('customize-cra');
module.exports = override(

    ...addBabelPlugins([
        'module-resolver',
        {
            alias : {
                '@components'     : './src/components',
            }
        }
    ])
);

那么你可以使用这样的绝对路径

import TextLabel from '@components/textLabel/index.js'

【讨论】:

    猜你喜欢
    • 2020-11-05
    • 1970-01-01
    • 1970-01-01
    • 2015-07-06
    • 2020-07-31
    • 2016-06-15
    • 1970-01-01
    • 2014-05-30
    • 2019-11-21
    相关资源
    最近更新 更多