Nodejs 为什么uglify压缩a.b.js, a.c.js 得到 a.js

Nodejs 为什么uglify压缩a.b.js, a.c.js 得到 a.js

配置如下:

"files": [{
	"expand": true,
	"ext": ".min.js",
	"cwd": "dist/dev/",
	"src": ["**/*.js", "!**/*.min.js"],
	"dest": "dist/dev/min/"
}]

结果将dist/dev/js/下的jquery.aaa.js和jquery.bbb.js合并成了jquery.min.js

是否有配置参数可以配置?


7 回复

Nodejs 为什么uglify压缩a.b.js, a.c.js 得到 a.js

配置文件解析与问题背景

你提到的配置文件看起来像是Gulp或Grunt任务运行器中的一个配置片段。这类配置文件通常用于自动化构建任务,比如合并、压缩和优化前端资源文件。

你遇到的问题是,当你试图使用UglifyJS工具压缩a.b.jsa.c.js时,最终得到的是a.js而不是预期的a.min.js。这可能是由于配置错误或者对工具的使用方式不正确。

示例配置及问题分析

假设我们使用Gulp作为构建工具,并且使用gulp-uglify插件来压缩JavaScript文件。以下是一个可能的配置文件示例:

const gulp = require('gulp');
const uglify = require('gulp-uglify');

// 合并和压缩指定的JS文件
gulp.task('compress', function() {
    return gulp.src(['a.b.js', 'a.c.js']) // 指定需要压缩的源文件
        .pipe(uglify()) // 使用uglify插件进行压缩
        .pipe(gulp.dest('dist/dev/min/')); // 输出压缩后的文件到指定目录
});

在这个例子中,我们指定了两个源文件a.b.jsa.c.js,然后通过uglify()方法进行压缩,并将结果输出到dist/dev/min/目录下。

为什么得到的是a.js?

如果你发现压缩后的文件名为a.js而不是a.min.js,这可能是因为你的输出路径或文件名规则有问题。确保你的gulp.dest方法中的路径和文件名符合预期。

例如,如果你希望生成a.min.js,你可以这样修改输出路径:

.pipe(gulp.dest('dist/dev/min/a.min.js'));

但是,这种方法会覆盖a.min.js文件,而不会保持原始文件结构。为了更好地管理文件,建议保留原始文件结构:

.pipe(gulp.dest('dist/dev/min/'))

并且确保源文件匹配规则正确地指向了a.b.jsa.c.js

总结

  1. 检查配置文件:确保你的Gulp或Grunt配置文件正确无误。
  2. 输出路径:确认输出路径和文件名规则是否正确。
  3. 插件版本:确保使用的插件版本支持你的需求。

通过上述步骤,你应该能够解决文件命名和合并压缩过程中的问题。如果问题仍然存在,请检查是否有其他配置或环境因素影响了构建流程。


命令行的 uglify 么… 要不换成 gulp?

在concat命令做

好吧, 我没明白楼主想要做什么? .min. 这个后缀是前边配置的, 需要的话直接换个名字不就好了.

解决了,在grunt/lib/grunt/file.js下,有一段:

if ('ext' in options) {
	destPath = destPath.replace(extDotRe[options.extDot], options.ext);
}

是自己配置的问题

根据你的描述,问题的核心在于使用 UglifyJS 将多个 .js 文件合并并压缩成一个文件。在这个过程中,文件名发生了变化。对于你提到的问题,“Nodejs 为什么uglify压缩a.b.js, a.c.js 得到 a.js”,这是由于在 UglifyJS 的配置中,输出文件的名称可能没有正确指定。

UglifyJS 默认会将输入文件的内容合并并压缩到一个文件中。如果你希望保留原始文件名的一部分或所有部分,你需要显式地指定输出文件名。以下是如何配置 UglifyJS 来实现这一点的示例:

示例配置

假设你有两个文件 a.b.jsa.c.js,你想将它们合并并压缩成 a.js,你可以使用如下配置:

const uglify = require('uglify-es');
const fs = require('fs');

// 读取两个文件的内容
let contentAB = fs.readFileSync('a.b.js', 'utf-8');
let contentAC = fs.readFileSync('a.c.js', 'utf-8');

// 合并内容
let combinedContent = contentAB + '\n' + contentAC;

// 压缩内容
let result = uglify.minify(combinedContent);

// 写入压缩后的文件
fs.writeFileSync('a.js', result.code);

解释

  1. 读取文件内容:首先,我们使用 fs.readFileSync 读取 a.b.jsa.c.js 的内容。
  2. 合并内容:然后,我们将这两个文件的内容用换行符 \n 分隔后合并。
  3. 压缩内容:接下来,我们使用 uglify.minify 方法对合并后的内容进行压缩。
  4. 写入文件:最后,我们将压缩后的内容写入 a.js 文件。

这样配置后,a.b.jsa.c.js 将被合并并压缩为 a.js

注意事项

  • 确保你已经安装了 uglify-es 包(如果你使用的是 ES6+ 语法):
    npm install uglify-es --save-dev
    
  • 如果你使用的是其他工具(如 gulp-uglifygrunt-contrib-uglify),确保在配置中正确指定输出文件名。
回到顶部