2017-12-18 138 views
0

我在npm package.json中創建腳本。將參數傳遞給npm運行腳本

該腳本將運行自耕農腳手架我的模板,然後我想運行一飲而盡任務做一些更多的東西,以一個特定的文件(注射用gulp-inject

故宮任務看起來是這樣的:

"scaffolt": "scaffolt -g scaffolt/generators template && gulp inject"

現在,我需要能夠從命令行中給我的模板命名。

我需要運行的命令如下:

npm run scaffolt {templateName}

,但如果我這樣做,然後我嘗試運行一飲而盡任務調用一樣的類型化{} TEMPLATENAME。

一個簡單的例子:如果我運行npm run scaffolt myTemplate,那麼第二部分將嘗試運行一個名爲gulp myTemplate的任務,失敗。

是否有任何方法將{myTemplate}名稱作爲參數傳遞給腳本的第二部分,以便它可以在gulptask中使用?

吞嚥任務目前只有console.logprocess.argv

回答

1

您可以將參數傳遞給npm運行腳本。這裏是documentation

爲這些操作完成大量的任務。

//gulpfile.js 
const gulp = require('gulp'); 
const commandLineArgs = require('command-line-args'); 
const spawn = require('child_process').spawn; 

gulp.task('inject', ['scaffolt'],() => { 
    console.log('scaffolt complete!'); 
}); 
gulp.task('scaffolt', (cb) => { 
    const options = commandLineArgs([{ name: 'templateName' }]); 

//use scaffolt.cmd on Windows! 
spawn('scaffolt', ['-g', 'scaffolt/generators', options.templateName]) 
    .on('close', cb); 
}); 

而在你的包

//package.json 
"scripts": { 
    "scaffolt": "gulp inject " 
} 

並運行它npm run scaffolt -- --templateName=something

提示: NPM運行腳本追加node_modules/.bin目錄的路徑,所以我們可以生成可執行文件,就像它們是在同一個文件夾!

+0

以及如何更改package.json文件上的命令? – Nick

+0

你不需要改變它現在應該工作的命令,如果不是,請註釋npm運行的實際命令 –

+0

這是它運行的內容:scaffolt -g scaffolt/generators template && gulp inject「--templateName = aw esome但它不起作用,因爲腳手架語法是腳手架-g腳手架/發電機模板{templateName}這不是通過 – Nick