如何解决如何从命令行向npm和grunt传递参数? 通过grunt命令的输出通过npm命令的输出附加说明:
我正在尝试使工作流程中的某些过程自动化,为此,我需要使用一些变量来控制我正在工作的环境。
我将从一个简单的示例开始,该示例是创建新文件夹并复制一些样板文件的命令。为此,我使用了npm和grunt,如下所示:
package.json
"scripts": {
"new": "grunt new --target
},
grunt.js
module.exports = function (grunt) {
const target = grunt.option('target');
console.log('Target: ',target);
grunt.config.set('copy',{
new: {
files: [{
expand: true,cwd: 'assets/zip',src: '*.zip',dest: 'projects/',}]
},});
}
我正试图这样称呼它:
npm run new --target:my-folder-name
这只是一个简单的示例,我正在运行其他脚本,例如解压缩文件,重命名,复制,处理scss等...
我期望的任务是运行将文件复制到名为my-folder-name
的文件夹中,但是没有实现。控制台正在打印true
,而不是文件夹名称。
我需要怎么做才能将参数传递给脚本?
解决方法
假设我们的人为设计的目录结构如下:
.
├── Gruntfile.js
├── assets
│ └── zip
│ ├── file1.zip
│ ├── file2.zip
│ └── file3.zip
├── node_modules
│ └── ...
└── package.json
然后考虑以下使用grunt-contrib-copy的 Gruntfile.js 示例:
Gruntfile.js
module.exports = function(grunt) {
const target = grunt.option('target') || 'foobar'; // default dir is `foobar`.
grunt.loadNpmTasks('grunt-contrib-copy');
grunt.initConfig({
copy: {
zips: {
files: [{
expand: true,cwd: 'assets/zip',src: '*.zip',dest: 'projects/' + target
}]
}
}
});
grunt.registerTask('copy-zips',[ 'copy:zips' ]);
};
通过grunt
命令的输出。
-
如果我们
cd
到项目目录并运行以下grunt
命令:grunt copy-zips
以下文件夹(
projects/foobar
)在项目目录的根目录中创建。结果示例A
. ├── ... └── projects └── foobar ├── file1.zip ├── file2.zip └── file3.zip
注意,已创建默认的
foobar
文件夹,其中包含*.zip
文件的副本。该文件夹被命名为foobar
,因为我们没有通过命令行提供参数。 -
接下来,如果我们再次
cd
到项目目录并运行以下grunt命令:grunt copy-zips --target=my-folder-name
以下文件夹(
projects/my-folder-name
)在项目目录的根目录中创建。结果示例B
. ├── ... └── projects └── my-folder-name ├── file1.zip ├── file2.zip └── file3.zip
注意这次是创建
my-folder-name
文件夹,其中包含*.zip
文件的副本,因为我们提供了--target=my-folder-name
参数/选项。
通过npm
命令的输出。
首先,我们在项目 package.json 中配置scripts
部分,如下所示:
package,json
{
...
"scripts": {
"copy-zips": "grunt copy-zips"
},...
}
-
如果我们
cd
到项目目录并运行以下npm
命令:npm run copy-zips
我们得到与上述结果示例A 部分所示的结果相同的结果。
-
接下来,如果我们再次进入项目目录并运行以下
npm
命令:npm run copy-zips -- --target=my-folder-name
我们得到与上述结果示例B 部分中所示的结果相同的结果。
注意:
--
和参数npm run copy-zips
之间的附加--target=my-folder-name
选项。npm docs描述了
--
选项,如下所示:从npm@2.0.0开始,您可以在执行脚本时使用自定义参数。
getopt
使用特殊选项--
来分隔选项的结尾。 npm会将--
之后的所有参数直接传递给您的脚本:
附加说明:
如果您不想在my-folder-name
文件夹中创建projects
文件夹,而是想在项目目录的根目录中创建my-folder-name
文件夹,那么您可以按如下所示在dest
任务中重新定义copy
属性:
Gruntfile.js
// ...
grunt.initConfig({
copy: {
zips: {
files: [{
expand: true,dest: target // <-----
}]
}
}
});
// ...
运行相同的命令:
npm run copy-zips -- --target=my-folder-name
产生以下结果:
.
├── ...
└── my-folder-name
├── file1.zip
├── file2.zip
└── file3.zip
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。