Gulp 将参数传递给npm运行脚本

hrysbysz  于 2022-12-08  发布在  Gulp
关注(0)|答案(2)|浏览(185)

我正在npm package.json中创建一个脚本。
脚本将运行yeoman来搭建我的模板,然后我想运行一个gulp任务来对一个特定的文件做更多的事情(使用gulp-inject进行注入)
npm任务如下所示:
"scaffolt": "scaffolt -g scaffolt/generators template && gulp inject"
现在,我需要能够从命令行调用该命令,为我的模板命名。
我需要运行的命令如下:
npm run scaffolt {templateName}
但如果这样做,则会尝试运行与键入的{templateName}名称相同的gulp任务。
快速示例:如果我运行npm run scaffolt myTemplate,那么第二部分将尝试运行一个名为gulp myTemplate的任务,失败。
有没有办法将{myTemplate}名称作为参数传递给脚本的第二部分,以便在gulptask中使用它?
这个大口任务目前只有console.log这个process.argv

8oomwypt

8oomwypt1#

您可以将参数传递给npm运行脚本。
为这些操作制定吞咽任务。

//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目录附加到PATH中,这样我们就可以生成可执行文件,就像它们在同一个文件夹中一样!

mpgws1up

mpgws1up2#

您可以在脚本定义中使用神奇的$npm_config_<exampleVarName>,然后从名为match exampleVarName的env变量传递它的值,或者在添加--exampleVarName=ValueHere的命令行中传递它
在你的情况下

//package.json
"scripts": {
    "scaffolt": "scaffolt -g scaffolt/generators $npm_config_templateName && gulp inject"
}

然后将其作为
npm run scaffolt --templateName=whatever

相关问题