2016-09-30 122 views
2

我有一个裸机存储库,我们从中启动新项目。在这个仓库里面是另一个需要单独更新的仓库。每个项目都从这两个存储库开始,但有时在项目过程中,它们不应同时更新。如何在windows上的npm脚本中使用变量

我想创建一个Npm脚本克隆父存储库,然后它打开文件夹并克隆子存储库。

脚本有一个变量,表示项目和文件夹名称。

基于this answer,我想出了以下内容:

"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文件夹实际读取变量。

也试过:

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

npm run new_project --PROJECT new_project_name 

npm run new_project -- --PROJECT=new_project 

同样的结果。

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

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

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

但这只是给了我语法错误。

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

该命令必须是单行。

我使用Git的bash在Windows上的CLI

NPM版本:20年2月14日

+0

@zerohero 20年2月14日 – timo

回答

0

因此,the answer I linked不工作,因为操作系统的差异,似乎在我的机器上失败。

这在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上设置变量。要与脚本结合使用,您需要将脚本和设置变量命令链接到&&

所以在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

另外请注意,如果你想指的是你有逃脱同样的方式变量配置变量。因此$npm_package_config_yourvariable在Windows上变成%npm_package_config_yourvariable%

0

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

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

然后:

npm run --PROJECT new_project_name 
+0

这将是'NPM运行NEW_PROJECT --project new_project_name'并产生相同的结果。 – timo

+0

这似乎在Linux上工作,但我不知道如何逃避在Windows上的变量。 '$ PROJECT'在Windows机器上被解释为字符串。 – timo

0

您可以使用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" 
    } 
} 

然后:

npm config set myapp:folder mynewfolder 

npm run newproject 

但在我看来,更好的办法是使用外部的NodeJS自定义脚本,并用脚本NPM运行。

+0

我也遇到过这个。但是对于此操作只有一个命令是强制性的。您能否详细说明如何使用外部NodeJS自定义脚本来实现此功能? – timo

+0

像那样'npm config set myapp:folder mynewfolder && npm run newproject'?你想要做什么?随着更多的信息,我可以为你制定更好的解决方案。 –

+0

我想克隆一个存储库到一个文件夹与自定义文件夹名称,该过程完成后我想要打开该文件夹并克隆克隆存储库文件夹中的另一个存储库。这第二个存储库不需要自定义文件夹名称。我想用一个命令来实现这一点。你的溶剂可行,但需要两个独立的命令。 – timo

相关问题