[javascript] webpack으로 축소 및 압축되지 않은 번들을 작성하는 방법은 무엇입니까?

여기 내 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})
  ]
};

나는 건물

$ webpack

dist폴더에는

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

나는 또한 압축되지 않은 것을보고 싶습니다 bundle.js



답변

webpack.config.js :

const webpack = require("webpack");

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
    })
  ]
};

Webpack 4부터는 webpack.optimize.UglifyJsPlugin더 이상 사용되지 않으며 사용으로 인해 오류가 발생합니다.

webpack.optimize.UglifyJsPlugin이 제거되었습니다. 대신 config.optimization.minimize를 사용하십시오.

설명서에 설명 된 대로 플러그인을 minimize옵션 으로 교체 할 수 있습니다 . UglifyJsPlugin인스턴스 를 지정하여 플러그인에 사용자 정의 구성을 제공 할 수 있습니다 .

const webpack = require("webpack");
const UglifyJsPlugin = require('uglifyjs-webpack-plugin');

module.exports = {
  // ...
  optimization: {
    minimize: true,
    minimizer: [new UglifyJsPlugin({
      include: /\.min\.js$/
    })]
  }
};

이것은 간단한 설정 작업을 수행합니다. 보다 효과적인 해결책은 Webpack과 함께 Gulp를 사용하고 한 번에 동일한 작업을 수행하는 것입니다.


답변

단일 구성 파일을 사용하고 환경 변수를 사용하여 조건부로 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 }
    })
  ] : []
};

그리고이 변수를 축소하려는 경우이 변수를 설정하십시오.

$ PROD_ENV=1 webpack

편집하다:

의견에서 언급했듯이, NODE_ENV일반적으로 특정 환경이 프로덕션 환경인지 개발 환경인지를 나타내는 데 사용됩니다 (일반적으로). 이를 확인하기 위해을 설정 var PROD = (process.env.NODE_ENV === 'production')하고 정상적으로 계속할 수도 있습니다 .


답변

다른 인수로 웹팩을 두 번 실행할 수 있습니다.

$ 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

내 webpack.config.js의 생략합니다 devtool, debug, pathinfo,이 두 플래그에 찬성 플러그인 minmize.


답변

어쩌면 나는 여기에 늦었지만 같은 문제가 있으므로이 목적 으로 축소되지 않은 webpack-plugin 을 작성했습니다.

설치

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. ./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. 번들 된 코드와 소스 코드 및 소스 맵을 빌드 할 때마다 npm run build명령을 실행하십시오 .

uglify-js를 전역 적으로 설치할 필요가 없으며 프로젝트를 위해 로컬로 설치하십시오.


답변

웹팩에 대한 두 가지 구성을 만들 수 있습니다. 하나는 코드를 축소하고 다른 하나는 최적화하지 않습니다 (optimize.UglifyJSPlugin 행 제거). 두 구성을 동시에 실행 $ webpack && webpack --config webpack.config.min.js