我试图将Grunt配置为开始使用ES6,以便将每个组件的JS文件发送到它自己的文件夹。
我有下一个目录结构:
Components
└──footer
│ └──js
│ └──footer.jsx
└──header
│ └──js
│ └──header.jsx
└──slider
└──js
└──slider.jsx

我需要有下一个结果:
Components
└──footer
│ └──js
│ │ └──footer.jsx
│ └──compiled
│ └──footer.js
└──header
│ └──js
│ │ └──header.jsx
│ └──compiled
│ └──header.js
└──slider
└──js
│ └──slider.jsx
└──compiled
└──slider.js

目前我有以下配置:
babel: {
options: {
sourceMap: true,
presets: ['env']
},
dist: {
files: [{
expand: true,
cwd: "src/Components",
src: ["**/*.jsx"],
dest: 'compiled',
ext: '.js',
extDot: 'first'
}]
}
}
并将所有已编译的文件放入一个公共文件夹中。
如何配置为每个自己的组件目录编译JS?
答案 0 :(得分:0)
当building the files object dynamically时,您可以使用grunts rename属性生成并返回新的目标路径。 rename
函数是您可以处理此类需求的逻辑的地方。
<强> Gruntfile.js 强>
// ...
babel: {
options: {
sourceMap: true,
presets: ['env']
},
dist: {
files: [{
expand: true,
cwd: 'src/Components',
src: ["**/*.jsx"],
dest: 'src/Components', // <--- This should be the same value as `cwd`
rename: function (dest, src) {
var destParts = dest.split('/'),
srcParts = src.split('/');
srcParts.splice((srcParts.length - 2), 1, 'compiled');
return destParts.concat(srcParts).join('/');
},
ext: '.js',
extDot: 'first'
}]
}
}
// ...
备注强>