我已经在其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.
答案 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
。
尝试从没有npm
或yarn
直接运行脚本的简单命令中运行命令,然后使用npm
和yarn
进行测试,最后尝试使用postinstall挂钩缩小问题范围。