如何在Windows上的npm脚本中使用变量


How to use variables in npm scripts on windows

我有一个空的存储库,从中我们可以开始新的项目。在这个存储库中是另一个必须单独更新的存储库。每个项目都从这两个存储库开始,但有时在项目期间,它们不应该同时更新。

我正在尝试创建一个NPM脚本来克隆父存储库,然后它打开文件夹并克隆子存储库。

脚本有一个表示项目的变量,因此有一个文件夹名。

基于这个答案,我得出了以下结论:

1
"new_project":"git clone x:/parent_repo $PROJECT & cd $PROJECT & git clone x:/child_repo"

我像这样运行命令:PROJECT=new_project_name npm run new_project。也尝试过PROJECT="new_project_name" npm run new_project

不幸的是,这会创建一个名为$PROJECT的文件夹,而不是实际读取变量。

也尝试过:

1
2
3
"new_project":"git clone x:/parent_repo $PROJECT & cd $PROJECT & git clone x:/child_repo"

npm run new_project --PROJECT new_project_name

或运行

1
npm run new_project -- --PROJECT=new_project

同样的结果。

大多数这些解决方案似乎在Linux机器上工作,但不适用于Windows。

字符串中的变量似乎没有被这样读取。我试过

1
"git clone x:/parent_repo"+$PROJECT+" & cd"+$PROJECT+" & git clone x:/child_repo"

但那给了我语法错误。

如何成功地从命令行传递可在NPM脚本中使用的变量?

命令必须是单行。

我在Windows上使用git bash作为cli

NPM版本:2.14.20


所以,我链接的答案不起作用,似乎因为操作系统的不同而在我的机器上失败了。

这适用于Linux:

"new_project":"git clone x:/parent_repo $PROJECT & cd $PROJECT & git clone x:/child_repo"

PROJECT=new_project_name npm run new_project

为了在Windows上工作,需要使用% %而不是$来转义变量。此外,还需要在Windows CLI上具体设置变量。要与脚本结合,需要将脚本和set variable命令与&&链接起来。

所以上面的窗口变成:

"new_project":"git clone x:/parent_repo %PROJECT% & cd %PROJECT% & git clone x:/child_repo"

SET PROJECT=new_project_name && npm run new_project

还要注意,如果您想要引用配置变量,那么必须以同样的方式对该变量进行转义。所以在窗户上,$npm_package_config_yourvariable变成了%npm_package_config_yourvariable%


您可以使用package.json配置。

1
2
3
4
5
6
7
{
   "name" :"myapp",
   "config" : {"folder":"myfolder" },
   "scripts" : {
       "new_project":"git clone x:/parent_repo $npm_package_config_folder & cd $npm_package_config_folder & git clone x:/child_repo"
    }
}

然后:

1
2
3
npm config set myapp:folder mynewfolder

npm run newproject

But in my opinion, the better way is to use an external NodeJS custom script and run it with a npm script.


如果你看下面的页面:https://github.com/npm/npm/pull/5518(在你链接的答案上)

1
"new_project":"git clone x:/parent_repo $PROJECT & cd $PROJECT & git clone x:/child_repo"

然后:

1
npm run --PROJECT new_project_name