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

tim*_*imo 6 npm

我有一个光秃秃的存储库,我们可以从中开始新的项目。在该存储库内是另一个必须单独更新的存储库。每个项目都从这两个资源库开始,但是有时在项目过程中不应同时更新它们。

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

该脚本具有代表项目的变量,因此代表文件夹名称。

基于此答案,我提出了以下建议:

"new_project": "git clone x:/parent_repo $PROJECT & cd $PROJECT & git clone x:/child_repo"
Run Code Online (Sandbox Code Playgroud)

我运行命令,如下所示:PROJECT=new_project_name npm run new_project 也曾尝试PROJECT="new_project_name" npm run new_project

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

还尝试了:

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

npm run new_project --PROJECT new_project_name
Run Code Online (Sandbox Code Playgroud)

或与

npm run new_project -- --PROJECT=new_project
Run Code Online (Sandbox Code Playgroud)

结果相同。

这些解决方案中的大多数似乎都可以在Linux机器上使用,但不适用于Windows。

看来字符串中的变量没有被读取。我试过了

"git clone x:/parent_repo "+$PROJECT+" & cd "+$PROJECT+" & git clone x:/child_repo" 
Run Code Online (Sandbox Code Playgroud)

但这只是给我语法错误。

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

该命令必须为一行。

我正在Windows上使用Git bash作为cli

npm版本:2.14.20

Max*_*nas 6

您可以使用package.json配置。

{
    "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"
    }
}
Run Code Online (Sandbox Code Playgroud)

然后 :

npm config set myapp:folder mynewfolder

npm run newproject
Run Code Online (Sandbox Code Playgroud)

但在我看来,更好的方法是使用外部 NodeJS 自定义脚本并通过 npm 脚本运行它。


tim*_*imo 6

因此,由于操作系统不同,我链接的答案无法正常工作,但似乎在我的机器上失败了。

这适用于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命令与链接&&

因此,Windows上的内容变为:

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

SET PROJECT=new_project_name && npm run new_project

另请注意,如果要引用配置变量,则必须以相同的方式转义该变量。因此在Windows上$npm_package_config_yourvariable变为%npm_package_config_yourvariable%