如何使用webpack构build缩小的和未压缩的包?

这是我的webpack.config.js

 var webpack = require("webpack"); module.exports = { entry: "./entry.js", devtool: "source-map", output: { path: "./dist", filename: "bundle.min.js" }, plugins: [ new webpack.optimize.UglifyJsPlugin({minimize: true}) ] }; 

我正在build设

 $ webpack 

在我的dist文件夹中,我只能得到

  • bundle.min.js
  • bundle.min.js.map

我也想看到未压缩的bundle.js

您可以使用单个configuration文件,并使用环境variables有条件地包含UglifyJS插件:

 var webpack = require('webpack'); var PROD = JSON.parse(process.env.PROD_ENV || '0'); module.exports = { entry: './entry.js', devtool: 'source-map', output: { path: './dist', filename: PROD ? 'bundle.min.js' : 'bundle.js' }, plugins: PROD ? [ new webpack.optimize.UglifyJsPlugin({ compress: { warnings: false } }) ] : [] }; 

然后在你想缩小它的时候设置这个variables:

 $ PROD_ENV=1 webpack 

编辑:

正如在评论中提到的那样, NODE_ENV通常用于(通过约定)来说明一个特定的环境是一个生产环境还是一个开发环境。 要检查它,你也可以设置var PROD = (process.env.NODE_ENV === 'production') ,并正常继续。

 module.exports = { entry: { "bundle": "./entry.js", "bundle.min": "./entry.js", }, devtool: "source-map", output: { path: "./dist", filename: "[name].js" }, plugins: [ new webpack.optimize.UglifyJsPlugin({ include: /\.min\.js$/, minimize: true }) ] }; 

虽然没有像在Gulp中一次完成同样的事情那样有效,但它只是简单的设置工作。

你可以用不同的参数运行两次webpack:

 $ webpack --minimize 

然后检查webpack.config.js命令行参数:

 var path = require('path'), webpack = require('webpack'), minimize = process.argv.indexOf('--minimize') !== -1, plugins = []; if (minimize) { plugins.push(new webpack.optimize.UglifyJsPlugin()); } ... 

例如webpack.config.js

要添加另一个答案,标志-p (– --optimize-minimize )将使用默认参数启用UglifyJS。

你不会从一次运行中得到一个缩小的和未加工的包,或者生成不同名称的包,所以-p标志可能不符合你的用例。

相反, -d选项是--debug --devtool sourcemap --output-pathinfo --devtool sourcemap

我的webpack.config.js省略了devtooldebugpathinfo和minmize插件来支持这两个标志。

也许我在这里迟到,但我有同样的问题,所以我为此写了一个unminified-webpack插件 。

安装

 npm install --save-dev unminified-webpack-plugin 

用法

 var path = require('path'); var webpack = require('webpack'); var UnminifiedWebpackPlugin = require('unminified-webpack-plugin'); module.exports = { entry: { index: './src/index.js' }, output: { path: path.resolve(__dirname, 'dist'), filename: 'library.min.js' }, plugins: [ new webpack.optimize.UglifyJsPlugin({ compress: { warnings: false } }), new UnminifiedWebpackPlugin() ] }; 

通过这样做,你将得到两个文件library.min.js和library.js。 没有必要执行webpack两次,它只是工作!^^

在我看来,直接使用UglifyJS工具更容易:

  1. npm install --save-dev uglify-js
  2. 正常使用webpack,比如build立一个./dst/bundle.js文件。
  3. 将一个build命令添加到你的package.json

     "scripts": { "build": "webpack && uglifyjs ./dst/bundle.js -c -m -o ./dst/bundle.min.js --source-map ./dst/bundle.min.js.map" } 
  4. 无论何时你想要构build你的bundle以及丑陋的代码和源代码,运行npm run build命令。

无需在全球安装uglify-js,只需在本地为项目安装。

您可以为webpack创build两个configuration文件,一个用于缩小代码,另一个不用(仅删除optimize.UglifyJSPlugin行),然后同时运行这两个configuration。 $ webpack && webpack --config webpack.config.min.js

根据这一行: https : //github.com/pingyuanChen/webpack-uglify-js-plugin/blob/master/index.js#L117

应该是这样的:

 var webpack = require("webpack"); module.exports = { entry: "./entry.js", devtool: "source-map", output: { path: "./dist", filename: "bundle.js" }, plugins: [ new webpack.optimize.UglifyJsPlugin({ minimize: true, compress: false }) ] }; 

事实上,你可以通过根据你的env / argv策略导出不同的configuration来build立多个版本。

你可以像这样格式化你的webpack.config.js:

 var debug = process.env.NODE_ENV !== "production"; var webpack = require('webpack'); module.exports = { context: __dirname, devtool: debug ? "inline-sourcemap" : null, entry: "./entry.js", output: { path: __dirname + "/dist", filename: "library.min.js" }, plugins: debug ? [] : [ new webpack.optimize.DedupePlugin(), new webpack.optimize.OccurenceOrderPlugin(), new webpack.optimize.UglifyJsPlugin({ mangle: false, sourcemap: false }), ], };' 

然后build立它unminified运行(在项目的主目录中):

 $ webpack 

build立它缩小运行:

 $ NODE_ENV=production webpack 

注意:确保对于未修剪的版本,您将输出文件名更改为library.js ,并将缩小的library.min.js更改为不相互覆盖。

webpack entry.jsx ./output.js -p

为我工作,与-p标志。

您可以在您的webpackconfiguration中定义两个入口点,一个用于正常的js,另一个用于缩小js。 然后,你应该输出你的软件包名称,并configurationUglifyJS插件包括min.js文件。 有关更多详细信息,请参阅示例webpackconfiguration:

 module.exports = { entry: { 'bundle': './src/index.js', 'bundle.min': './src/index.js', }, output: { path: path.resolve(__dirname, 'dist'), filename: "[name].js" }, plugins: [ new webpack.optimize.UglifyJsPlugin({ include: /\.min\.js$/, minimize: true }) ] }; 

运行webpack之后,你会在你的dist文件夹中得到bundle.js和bundle.min.js,不需要额外的插件。