如何在Gruntfile.js的uglify配置中更新ES6 import语句?
解决Grunt压缩JS时修改ES6 Import路径的问题
你当前的grunt-contrib-uglify配置可正常生成带.min.js后缀的压缩文件,但无法修改文件内的ES6 import语句路径。要实现自动将import中的.js替换为.min.js,可借助grunt-string-replace插件完成文本替换操作,步骤如下:
1. 安装grunt-string-replace插件
在项目根目录执行命令:
npm install grunt-string-replace --save-dev
2. 修改Gruntfile.js配置
更新后的完整配置如下:
module.exports = function(grunt) { grunt.initConfig({ uglify: { 'minify-each': { options: { beautify: false, mangle: false, sourceMap: true, compress: { drop_console: true } }, files: [{ cwd: 'src/private/assets/js/', src: '**/*.js', dest: 'src/public/assets/js/', expand: true, flatten: false, ext: '.min.js' }] } }, // 新增字符串替换任务 'string-replace': { 'fix-import-paths': { files: [{ cwd: 'src/public/assets/js/', src: '**/*.min.js', dest: 'src/public/assets/js/', expand: true, flatten: false }], options: { replacements: [{ // 匹配import语句中的.js后缀路径 pattern: /from\s+['"](.*?)\.js['"]/g, // 替换为带.min.js的路径 replacement: 'from \'$1.min.js\'' }] } } } }); grunt.loadNpmTasks('grunt-contrib-uglify'); grunt.loadNpmTasks('grunt-string-replace'); // 修改run任务,先执行压缩再替换路径 grunt.registerTask('run', ['uglify', 'string-replace:fix-import-paths']); };
3. 配置说明
string-replace任务会遍历src/public/assets/js/下所有.min.js文件- 正则表达式
/from\s+['"](.*?)\.js['"]/g会匹配所有ES6 import语句中的.js结尾路径 - 替换逻辑会将匹配到的
xxx.js替换为xxx.min.js,同时保留原路径结构
4. 效果验证
执行grunt run后,压缩后的file1.min.js中的import语句会被修改为:
import { getConstants, getUtils } from '../assets/js/utils.min.js'; import { WidgetClass } from '../assets/js/classes.min.js';
内容的提问来源于stack exchange,提问作者Didum
相关产品推荐
相关产品推荐

