如何使用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省略了devtool
, debug
, pathinfo
和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工具更容易:
-
npm install --save-dev uglify-js
- 正常使用webpack,比如build立一个
./dst/bundle.js
文件。 -
将一个
build
命令添加到你的package.json
:"scripts": { "build": "webpack && uglifyjs ./dst/bundle.js -c -m -o ./dst/bundle.min.js --source-map ./dst/bundle.min.js.map" }
- 无论何时你想要构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,不需要额外的插件。