2017-12-18 181 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