我无法从package.json中读取参数,所以它始终是$(目录)。 这是我的命令:
npm run migrate -- -directory "migration_dir"
的package.json
{
"name": "XXXX",
"version": "0.1.0",
"description": "XXX",
"main": "app.js",
"scripts": {
"migrate": "cd $(directory)"
},
"keywords": [
"XXXX"
],
"author": "XXXX",
"license": "MIT"
}
谢谢。
答案 0 :(得分:2)
您可能面临的问题有两个方面。
来自npm docs:
从npm@2.0.0开始,您可以在执行脚本时使用自定义参数。 getopt使用特殊选项
--
来分隔选项的结尾。 npm会将--
之后的所有参数直接传递给您的脚本:npm run test -- --grep="pattern"
--
之后的参数将直接传递 ,在您的情况下
$ cd $(directory) -directory "migration_dir"
要解决此问题,您必须相应地更改脚本定义:
"scripts": {
"migrate": "cd"
}
并传递没有-directory
选项的目录:
$ npm run migrate -- "migration_dir"
这将执行
$ cd "migration_dir"
您发布的migrate
脚本没用,因为所有npm脚本都在子shell中执行,而子shell中更改工作目录并不会在子shell退出时产生影响。
虽然你的脚本可以执行cd
以外的任何工作:
"scripts": {
"foo": "cd / && pwd"
}
&&
之后的部分脚本会看到cd
的效果,但你的shell不会。
$ npm run foo
> cd / && pwd
/
$ pwd
/your/original/path
但是,您不能再使用--
指定其他参数(npm run foo -- arg
将执行cd / && pwd arg
)。
答案 1 :(得分:0)
它看起来像你想要阅读ENV
参数。 Bash表示法为${directory}
而非$(directory)
。
现在您可以运行迁移
directory="migration_dir" npm run migrate
输出
cd migration_dir
此解决方案的优点是使用复杂脚本的可能性。