我试图在我的工作流程中自动化一些过程,为了做到这一点,我需要使用一些变量来控制我正在工作的环境。
首先是一个简单的示例,它是一个命令,用于创建一个新文件夹并复制一些样板文件。为了做到这一点,我使用了npm和咕噜,就像这样:
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,而不是文件夹名。
我需要做什么才能将参数传递给脚本?
发布于 2020-11-04 15:31:02
假设我们设计的项目目录结构如下:
.
├── Gruntfile.js
├── assets
│ └── zip
│ ├── file1.zip
│ ├── file2.zip
│ └── file3.zip
├── node_modules
│ └── ...
└── package.json然后考虑以下利用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命令:
咕噜拷贝拉链
以下文件夹(projects/foobar)是在项目目录的根目录中创建的。
结果示例A
。├──...└──项目└──foobar├──file1.zip├──file2.zip└──file3.zip
备注默认的foobar文件夹已经创建,其中包含*.zip文件的副本。该文件夹名为foobar,因为我们没有通过命令行提供参数。cd到项目目录并运行以下grunt命令:
-目标=我的文件夹-名称
以下文件夹(projects/my-folder-name)是在项目目录的根目录中创建的。
结果示例B
。├──...└──项目└──my-文件夹名为├──file1.zip├──file2.zip└──文件3.zip
Note这次已经创建了包含*.zip文件副本的my-folder-name文件夹,因为我们提供了--target=my-folder-name参数/选项。通过npm命令输出。
首先,让我们将项目scripts部分配置为package.json,如下所示:
包,json
{
...
"scripts": {
"copy-zips": "grunt copy-zips"
},
...
}cd转到项目目录并运行以下npm命令:
npm运行复制-压缩
我们得出的结果与前面的结果示例A部分中显示的结果相同。npm命令:
npm运行复制-压缩-目标=我的文件夹名称
我们得出的结果与前面的结果示例B部分中显示的结果相同。
注:是npm run copy-zips和参数--target=my-folder-name之间的附加--选项。
国家预防机制文档将--选项描述如下:
从npm@2.0.0开始,您可以在执行脚本时使用自定义参数。特殊选项--由getopt用来分隔选项的末尾。npm将在--之后将所有参数直接传递给脚本:补充说明:
如果不希望在my-folder-name文件夹中创建projects文件夹,而是希望在项目目录的根目录中创建my-folder-name文件夹,则可以按照以下方式在copy任务中重新定义dest属性:
Gruntfile.js
// ...
grunt.initConfig({
copy: {
zips: {
files: [{
expand: true,
cwd: 'assets/zip',
src: '*.zip',
dest: target // <-----
}]
}
}
});
// ...运行相同的命令:
npm run copy-zips -- --target=my-folder-name得到以下结果:
.
├── ...
└── my-folder-name
├── file1.zip
├── file2.zip
└── file3.zip https://stackoverflow.com/questions/64636387
复制相似问题