2016-09-30 33 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

相關問題