Node.js 狼吞虎咽+;Browserify&x2B;巴别塔&x2B;源映射:源映射包含重复的代码
我的gulpfile有以下内容:Node.js 狼吞虎咽+;Browserify&x2B;巴别塔&x2B;源映射:源映射包含重复的代码,node.js,gulp,browserify,source-maps,gulp-sourcemaps,Node.js,Gulp,Browserify,Source Maps,Gulp Sourcemaps,我的gulpfile有以下内容: const gulp = require("gulp"); const sourcemaps = require("gulp-sourcemaps"); const browserify = require("browserify"); const source = require("vinyl-source-stream"); const buffer = require("vinyl-buffer"); const babel = require("babe
const gulp = require("gulp");
const sourcemaps = require("gulp-sourcemaps");
const browserify = require("browserify");
const source = require("vinyl-source-stream");
const buffer = require("vinyl-buffer");
const babel = require("babel");
const uglify = require("uglify");
gulp.task("default", function() {
return browserify("src/app.js", {debug: true})
.bundle()
.pipe(source("app.js"))
.pipe(buffer())
.pipe(sourcemaps.init({loadMaps: true}))
.pipe(babel({presets: ["env"]}))
.pipe(uglify())
.pipe(sourcemaps.write("/src"))
.pipe(glup.dest("dist"));
});
相当标准的东西。Mysrc/app.js
仅包含以下内容:
const $ = require("jquery");
console.log($);
现在,当我运行gulp
并查看Chrome控制台时,我看到以下内容:
const $ = require("jquery");
console.log($);
此列表中的第一个app.js
文件位于src/js/app.js
中,它是我的实际源文件,包含两行代码
此列表中最后一个app.js
文件位于app.js
(无子目录)中,它是一个已编译和缩小的版本,只有一行不可理解的垃圾
然而,位于src/app.js
中的中间一个在运行babel或uglify之前包含了完整的Browserized源代码(const关键字仍然存在,并且是多行的,完全可读)
这使得我的源代码图比它需要的大一倍,因为它包含项目的整个源代码两次。关于清理它有什么建议吗
更新
做了一些快速测试,我把问题缩小到巴贝尔身上
当我删除Babel并运行Uglify时(修改app.js
以删除const
关键字,这样Uglify就不会在我的源代码映射中重复代码)
当我删除Uglify并运行Babel时,仍然会得到重复的代码
出于某种原因,当Babel看到Browserify的输出时,它似乎将原始源映射和原始源文件都视为源代码(将它们都放在最终源映射中)
有什么我需要传递给Babel来解决这个问题吗?虽然我没有找到直接与Babel一起使用的方法,但我确实找到了绕过
.pipe(Babel())
步骤的方法:
npm install --save-dev babelify
如果您使用Browserify变换而不是直接使用Babel,那么源贴图从一开始就不会出错:
// Most of the file omitted for brevity. Only new / different stuff shown
const babelify = require("babelify");
browserify("app.js", {debug: true})
.transform(babelify, {presets: ["env"]})
.bundle()
这与预期的一样有效,并且创建了一个源映射,其中只包含一个所有代码的实例。这里有一个旧的解决方案,它对我有效