无法从package.json读取参数

时间:2015-10-09 08:49:41

标签: npm package.json

我无法从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"
}

谢谢。

2 个答案:

答案 0 :(得分:2)

您可能面临的问题有两个方面。

1。运行脚本的参数语法

来自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"

2。脚本正在子shell中执行

您发布的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

此解决方案的优点是使用复杂脚本的可能性。