为什么package.json脚本在本地项目上工作正常,但不能在依赖项目上工作

时间:2017-09-12 07:54:32

标签: node.js npm yarnpkg

我已经在其package.json文件中创建了一个npm模块(让我们称之为ModuleA)并定义了clean脚本,如下所示:

"scripts": {
    "test": "nyc mocha tests/ --opts mocha.opts",
    "build": "babel -d dist/ src/",
    "prepublish": "yarn run clean && yarn run build",
    "postinstall": "yarn run clean && yarn run build",
    "clean": "rimraf ./dist"
  },

我使用rimraf删除dist目录。此依赖关系在devDependencies中定义为"rimraf": "^2.6.1"。它在这个项目上运行良好。但是在我的另一个项目(我称之为ModuleB)中,它依赖于这个模块,yarn install不起作用,我得到以下错误:

$ rimraf ./dist
sh: 1: rimraf: not found 

npm/yarn构建ModuleB时会发生此错误。我已检查rimraf中的node_modules/.bin目录中是否存在ModuleB。如果我在全局安装rimraf,它可以正常工作。我想知道如何让npm / yarn从rimraf使用node_modules/.bin/rimraf

顺便说一下,我还将rimraf放在devDependencies ModuleB中。

我尝试更新ModuleA中的脚本以使用rimraf中的node_modules/.bin/rimraf,如下所示:

"clean": "node_modules/.bin/rimraf ./dist"

它在ModuleA上正常工作。但是在yarn install上运行ModuleB时出现以下错误:

$ node_modules/.bin/rimraf ./dist 
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.
sh: node_modules/.bin/rimraf: No such file or directory
error Command failed with exit code 127.

1 个答案:

答案 0 :(得分:0)

查看这些问题:

现在确保yarn clean npm clean按预期工作。

例如,如果您未在全球范围内安装rimraf,则无效:

$ rimraf ./dist

但这应该有效:

$ ./node_modules/.bin/rimraf ./dist

首先测试这些命令:

npm run clean

yarn run clean

使用package.json中定义的"clean": "rimraf ./dist"脚本。

请注意,运行package.json脚本时,./node_modules/.bin会添加到PATH

尝试从没有npmyarn直接运行脚本的简单命令中运行命令,然后使用npmyarn进行测试,最后尝试使用postinstall挂钩缩小问题范围。