webpack 如何同時輸出壓縮和未壓縮的檔案的實現步驟
阿新 • • 發佈:2020-06-05
有的時候我們想要同時生成壓縮和未壓縮的檔案,比如我們構建 lib 包的時候,我們希望使用者能夠使用壓縮過後的程式碼檔案作為 cdn 檔案,最簡單的一個方式就是通過指定環境變數,比如指定 MINIFY,如下:
const path = require('path') const isMinify = process.env.MINIFY /** * @type {import('webpack').Configuration} */ const config = { entry: { index: './src/index.js' },output: { filename: isMinify ? '[name].min.js' : '[name].js',path: path.join(__dirname,'dist') },devtool: 'cheap-source-map',optimization: { minimize: isMinify ? true : false } } module.exports = config
我們在使用的時候通過指定環境變數就可以打包成不同的版本:
"scripts": { "test": "echo \"Error: no test specified\" && exit 1","build:min": "MINIFY=1 webpack --config=webpack.config.js","build": "webpack --config=webpack.config.js" }
不過這樣的缺點就是我們需要執行兩次。
第二個方法是安裝unminified-webpack-plugin,通過這個外掛可以生成沒有壓縮的檔案:
const path = require('path') const UnminifiedWebpackPlugin = require('unminified-webpack-plugin'); /** * @type {import('webpack').Configuration} */ const config = { entry: { index: './src/index.js',},output: { filename: '[name].min.js',plugins: [ new UnminifiedWebpackPlugin({}) ] } module.exports = config
不過這個有個缺點就是未壓縮的檔案沒有 sourcemap。
第三種方法通過指定多個打包入口,然後手動指定壓縮外掛(uglifyjs、terser等)壓縮哪些檔案,如我們指定 index.min.js
這個檔案才需要壓縮,配置如下:
const path = require('path') const TerserWebpackPlugin = require('terser-webpack-plugin'); /** * @type {import('webpack').Configuration} */ const config = { entry: { index: './src/index.js','index.min': './src/index.js' },output: { filename: '[name].js',optimization: { minimize: true,minimizer: [ new TerserWebpackPlugin({ include: /min/,sourceMap: true }) ] } } module.exports = config
關鍵點如下:
這個時候生成的就完美了。
到此這篇關於webpack 如何同時輸出壓縮和未壓縮的檔案的文章就介紹到這了,更多相關webpack 如何同時輸出壓縮和未壓縮的檔案內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!