如何根据相应文件的父文件夹名称使用Grunt重命名文件?
我有以下结构:
src/ modules/ module1/ js/ main.js scss/ main.scss index.html module2/ js/ main.js scss/ main.scss index.html
我想运行一个咕task任务,将其复制到以下结构中:
dev/ js/ module1.js module2.js css/ module1.css module2.css module1.html module2.html
有没有办法做到这一点与现有的咕噜插件? 如果没有,我怎么能做到这一点?
这可以使用grunt-contrib-copy插件完成。
最重要的是要注意的是,你可以通过使用重命名函数(它接受每个文件的目的地和源代码)以编程方式改变目的地。
这里是一个(稍微脆弱的)样本Gruntfile.js
应该复制到你想要的结构:
module.exports = function(grunt) { // Project configuration. grunt.initConfig({ copy: { main: { files: [ { expand: true, cwd: 'src/modules/', src: ['**/*.js'], dest: 'dev/js/', rename: function(dest, src) { // use the source directory to create the file // example with your directory structure // dest = 'dev/js/' // src = 'module1/js/main.js' return dest + src.substring(0, src.indexOf('/')) + '.js'; } }, { expand: true, cwd: 'src/modules/', src: ['**/*.scss'], dest: 'dev/css/', rename: function(dest, src) { return dest + src.substring(0, src.indexOf('/')) + '.css'; } }, { expand: true, cwd: 'src/modules/', src: ['**/*.html'], dest: 'dev/', rename: function(dest, src) { return dest + src.substring(0, src.indexOf('/')) + '.html'; } } ] } } }); grunt.loadNpmTasks('grunt-contrib-copy'); // Default task(s). grunt.registerTask('default', ['copy']); };
现在不需要再使用grunt-contrib-copy
了,现在可以利用grunt.file.expandMapping
,它可以select只更改文件扩展名,或者定义一个返回输出文件名的函数。
下面是一个用于将.jade模板编译为.html文件的jade
任务中的files
对象示例:
files: [{ expand: true, src: "**/*.jade", dest: "<%= distDir %>", cwd: "<%= assetsDir %>/jade", rename: function(dest, matchedSrcPath, options) { // return the destination path and filename: return (dest + matchedSrcPath).replace('.jade', '.html'); } }]
在这种情况下使用ext: '.html'
选项而不是rename
选项会更容易,但是我在这里使用rename
,以便您可以看到它是如何工作的。
有关grunt.file文档中的ext
和rename
(以及其他)选项的更多信息。 这里和这里还有更多的例子。
您可以简单地使用这些选项:expand:true,flatten:true
不需要自定义重命名callback。
不完全是你的问题的答案,但我在这里find与咕噜相对dest文件夹所以…这是我如何解决它
... base: { files: [ { expand: true, cwd: 'app/design/frontend/', src: ['**/Magento_Sales/email-src/*.html'], dest: '../../Magento_Sales/email/', rename: function(dest, src, expand) { src = path.parse(src) return path.join(expand.cwd, src.dir, dest, src.base); } }, ], } ...
这一点path.join(expand.cwd, src.dir, dest, src.base);
只是创造我需要的path。
expand.cwd = app/design/frontend/
src.dir = <DYNAMIC_FOLDERS>/Magento_Sales/email-src/
dest = ../../Magento_Sales/email/
src.base = <FILE>.html
和所有它一起= app/design/frontend/<COMPANY>/<MAIN-THEME>/Magento_Sales/email/<FILE>.html
在我的情况下,现在将编译我的HTML电子邮件在相对目标文件夹
- javax.transaction.Transactional vs org.springframework.transaction.annotation.Transactional
- 用于调用存储过程的Spring JDBC模板