【发布时间】:2016-03-05 12:53:04
【问题描述】:
我使用 Oracle JET v2.0 创建了一个 javascript 应用程序。运行
grunt build:release
在项目根文件夹中创建 release 文件夹。如何将其更改为指向另一个路径,例如项目根目录之外的路径?
【问题讨论】:
标签: gruntjs oracle-jet
我使用 Oracle JET v2.0 创建了一个 javascript 应用程序。运行
grunt build:release
在项目根文件夹中创建 release 文件夹。如何将其更改为指向另一个路径,例如项目根目录之外的路径?
【问题讨论】:
标签: gruntjs oracle-jet
如果您使用的是 Yeoman 生成器,您可以按照 scripts/grunt/tasks/build.js 中的 Grunt 流程进行操作。您会在if (target === "release")
下看到它按顺序运行许多任务。
不幸的是,release 文件夹名称在许多任务的配置文件中是硬编码的。因此,在 build:release 任务的末尾添加一个任务以将构建的版本复制到新目录中可能更有意义。您可以将目标添加到名为 myFinalRelease 的 scripts/grunt/config/copy.js 文件中:
module.exports = {
release:
{
src: [
"**",
"!bower_components/**",
"!grunt/**",
"!scripts/**",
"!js/**/*.js",
"js/libs/**",
"!js/libs/**/*debug*",
"!js/libs/**/*debug*/**",
"!node_modules/**",
"!release/**",
"!test/**",
"!.gitignore",
"!bower.json",
"!Gruntfile.js",
"!npm-shrinkwrap.json",
"!oraclejetconfig.json",
"!package.json"
],
dest: "release/",
expand: true
},
myFinalRelease:
{
cwd: 'release/',
src: ['**'],
dest: "myRelease",
expand: true
}
};
然后在scripts/grunt/tasks/build.js的发布部分的最后一行添加那个task:target作为复制步骤:
...
if (target === "release")
{
grunt.task.run(
[
"clean:release",
"injector:mainReleasePaths",
"uglify:release",
"copy:release",
"requirejs",
"clean:mainTemp",
"copy:myFinalRelease"
]);
}
...
为了使其更加健壮,如果您正在执行大量 build:release'ing,您应该执行一些额外的清理任务,因为除非您创建任务来清理 myRelease 文件夹,否则不会被清理。或者您可以查看其他 Grunt 插件,例如 grunt-contrib-rename。
如果这对于您的口味来说复制太多并且太混乱,您可以编辑所有硬编码的任务配置以更改 release 目录的名称。您会发现目录名称显示在这四个文件中:
scripts/grunt/config/clean.js
...
release: ["release/*"],
...
scripts/grunt/config/uglify.js
...
dest:"release/js"
...
scripts/grunt/config/copy.js
...
dest: "release/",
...
scripts/grunt/config/require.js
...
baseUrl: "./release/js",
name: "main-temp",
mainConfigFile: "release/js/main-temp.js",
optimize: "none",
out: "release/js/main.js"...
...
【讨论】: