首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有webpack和gulp的精简、转译的ES6代码的外部源代码映射

带有webpack和gulp的精简、转译的ES6代码的外部源代码映射
EN

Stack Overflow用户
提问于 2015-05-19 01:52:40
回答 2查看 8.9K关注 0票数 24

我正在编写ES6代码,并使用Babel将其转换为ES5,然后使用Uglify进行缩小。都和webpack一起大口大口地跑着。我想使用外部源映射(使文件大小尽可能小)。

吞咽任务非常简单--所有时髦的东西都在webpack的配置中:

代码语言:javascript
复制
var gulp = require("gulp");
var webpack = require("gulp-webpack");

gulp.task("js:es6", function  () {
  return gulp.src(path.join(__dirname, "PTH", "TO", "SRC", "index.js"))
  .pipe(webpack(require("./webpack.config.js")))
  .pipe(gulp.dest(path.join(__dirname, "PTH", "TO", "DEST")));
});

webpack.config.js:

代码语言:javascript
复制
var path = require("path");
var webpack = require("webpack");

module.exports = {
  output: {
    filename: "main.js",
    sourceMapFilename: "main.js.map"
  },
  devtool: "#inline-source-map",
  module: {
    loaders: [
        { test: path.join(__dirname, "PTH", "TO", "SRC"),
          loader: "babel-loader" }
    ]
  },
  plugins: [
    new webpack.optimize.UglifyJsPlugin({
      compress: {
        warnings: false
      },
      output: {
        comments: false,
        semicolons: true
      },
      sourceMap: true
    })
  ]
};

上面的代码是工作的,它创建了工作的源图--但它们是内联的。

如果我更改了webpack.config.js,使其显示为devtool: "#source-map",则会将源映射创建为一个单独的文件(使用sourceMapFilename作为文件名)。但它是不可用的- Chrome开发工具似乎不理解它。如果我删除webpack.optimize.UglifyJsPlugin,那么源映射是可用的--但是代码不会缩小。因此,源映射适用于这两个单独的步骤,但当它们按顺序运行时则不起作用。

我怀疑uglify步骤忽略了上一个转译器步骤中的外部源映射,所以它生成的源映射是基于流的,而流当然不存在于gulp之外。因此出现了不可用的源图。

我对webpack来说还是个新手,所以我可能会错过一些明显的东西。

我想做的和这个问题类似,但是用的是webpack而不是browserify:Gulp + browserify + 6to5 + source maps

提前谢谢。

EN

回答 2

Stack Overflow用户

发布于 2015-05-26 15:08:24

我强烈建议你把你的webpack配置放在gulpfile中,或者至少让它成为一个函数。这有一些很好的好处,比如能够将其重用于不同的任务,但具有不同的选项。

我还建议直接使用webpack,而不是使用gulp-webpack (特别是如果您只通过它进行管道传输)。根据我的经验,这将给出更多可预测的结果。使用以下配置,即使在使用UglifyJS时,源映射也可以很好地工作:

代码语言:javascript
复制
"use strict";

var path = require("path");
var gulp = require("gulp");
var gutil = require("gulp-util");
var webpack = require("webpack");

function buildJs (options, callback) {
    var plugins = options.minify ? [
        new webpack.optimize.UglifyJsPlugin({
            compress: {
                warnings: false,
            },

            output: {
                comments: false,
                semicolons: true,
            },
        }),
    ] : [];

    webpack({
        entry: path.join(__dirname, "src", "index.js"),
        bail: !options.watch,
        watch: options.watch,
        devtool: "source-map",
        plugins: plugins,
        output: {
            path: path.join(__dirname, "dist"),
            filename: "index.js",
        },
        module: {
            loaders: [{
                loader: "babel-loader",
                test: /\.js$/,
                include: [
                    path.join(__dirname, "src"),
                ],
            }],
        },
    }, function (error, stats) {
        if ( error ) {
            var pluginError = new gutil.PluginError("webpack", error);

            if ( callback ) {
                callback(pluginError);
            } else {
                gutil.log("[webpack]", pluginError);
            }

            return;
        }

        gutil.log("[webpack]", stats.toString());
        if (callback) { callback(); }
    });
}

gulp.task("js:es6", function (callback) {
    buildJs({ watch: false, minify: false }, callback);
});

gulp.task("js:es6:minify", function (callback) {
    buildJs({ watch: false, minify: true }, callback);
});

gulp.task("watch", function () {
    buildJs({ watch: true, minify: false });
});
票数 11
EN

Stack Overflow用户

发布于 2016-01-24 19:44:14

我推荐使用webpack的devtool: 'source-map'

下面是一个带有源映射的示例webpack.config:

代码语言:javascript
复制
var path = require('path');
var webpack = require('webpack');

module.exports = {
  devtool: 'source-map',
  entry: ['./index'],
  output: {
    filename: 'bundle.js',
    path: path.join(__dirname, 'public'),
    publicPath: '/public/'
  },
  module: {
    loaders: [
      { test: /\.js$/, loader: 'babel-loader', exclude: /node_modules/ }
    ]
  },
  plugins: [
  ]

};
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30309860

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档