我有一个非常简单的项目。我在 src/
目录中有一些 bash 文件和一些 JavaScript 文件,我想转译 JS 文件,然后复制其余文件。
这是我的文件夹结构:
root
|- dist // Where grunt should output
|- src
| |- run_code // this is a bash file calling `code`
| |- code.es6 // My JavaScript files
|
|- Gruntfile.js
|- package.json
所以目前我有一个调用 babel
的 Gruntfile,它将我的 .es6
文件转换为 .js
,但不幸的是,我的 bash文件,run_code
未转译。这是我的 grunt 文件:
module.exports = function(grunt) {
require('load-grunt-tasks')(grunt);
grunt.initConfig({
babel: {
options: {
presets: ['es2015'],
plugins: []
},
dist: {
files: [{
expand: true,
cwd: 'src/',
src: ['**/*.es6'],
dest: 'dist/',
ext: '.js'
}]
}
}
});
grunt.registerTask('default', ['babel']);
};
看看 files: [{
部分。如您所见,我正在将 src/
目录中的 .es6
文件编译到 dist/
目录中。这工作正常,除了它不复制run_code
。
稍后我可能会添加其他任务,但我的问题是,我应该如何复制 grunt 任务尚未触及的文件?我知道我可以做一个过滤器来复制所有不是 .es6
的文件,但是硬编码感觉像是一个非常 hacky 的解决方案,当然应该有一些很好的方法来用 grunt 来做到这一点(如果有人知道一种复制和保留权限的方法会更好)。
最佳答案
据我所知,cwd
表示我们正在从 src/
目录复制,而 src
表示您只需要 .es6
文件。所以你实际上并没有告诉它复制(“通过 babel 运行”,真的)run_code
。
将 run_code
重命名为 run_code.es6
或将其添加到 src
数组中。
如果您只想复制 run_code
而不想对其进行转码,请使用 copy
包之一。以与包含 babel
相同的方式,添加类似 grunt-contrib-copy
的包使 copy
任务可用。安装和使用与 babel
非常相似,为方便起见引用如下:
安装:
npm install grunt-contrib-copy --save-dev
要使用,添加:
grunt.loadNpmTasks('grunt-contrib-copy');
对你的 initConfig
做这样的事情:
copy: {
main: {
files: [
{
expand: true,
cwd: 'src/',
src: ['run_code'],
dest: 'dist/'}
}
],
},
}
我还建议将您的 .es6
文件和可复制文件分类到它们自己的目录中以便组织,这样您就可以利用通配符表达式。
关于javascript - 构建一些文件,复制其余的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36974543/