Node.js 狼吞虎咽+;Browserify&x2B;巴别塔&x2B;源映射:源映射包含重复的代码

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

我的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("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"));
});
相当标准的东西。My
src/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()
这与预期的一样有效,并且创建了一个源映射,其中只包含一个所有代码的实例。

这里有一个旧的解决方案,它对我有效