webpack.config.js에서 ES6을 어떻게 사용합니까?


210

webpack.config에서 ES6을 사용하는 방법은 무엇입니까? 이 repo https://github.com/kriasoft/react-starter-kit 처럼 ?

예를 들어 :

이것을 사용하여

import webpack from 'webpack';

대신에

var webpack = require('webpack');

그것은 필요보다는 오히려 호기심입니다.


@ 질문입니다. 알아낼 수 없습니다. webpack.config에서 es6 구문을 사용하면 오류가 발생하기 때문입니다.
— Whisher

21
질문은 webpack.config에서 es6을 사용하는 방법입니다. 나에게 분명해 보입니다. 예를 들어 내 질문을 업데이트합니다.
— Whisher

1
기본적으로 es6을 지원하지 않는 node.js가 파일을 구문 분석합니다. 이것을 켜는 명령 줄 플래그가 있지만 그게 무엇인지 모르겠습니다. 노드 대신 io.js를 사용해보십시오.
— KJ Tsanaktsidis

@KJTsanaktsidis 힌트를 주셔서 감사하지만 나는 성공하지 못한 --harmony와 함께 시도했습니다
— Whisher

나는이 시도하지 않은,하지만 "노드 --harmony을 실행 해보십시오 which webpack"
— KJ Tsanaktsidis

답변:


230

구성 이름을로 지정하십시오 webpack.config.babel.js. 당신은해야 바벨가 등록 프로젝트에 포함되어 있습니다. 예에서 반응 라우터 - 부트 스트랩 .

Webpack은 내부적 으로 해석 하여이 작업을 수행합니다.


4
이것은 나를 위해 일했습니다. 나는 npm run이 스크립트 : webpack --config webpack.config.babel.js.
— Mat Gessel

9
없이도 직접 집어 올릴 수 있다고 생각합니다 --config.
— Juho Vepsäläinen

4
babel-loader모듈도 필요 하다고 생각 합니다.
— 플립 차트

7
실제로, 그것은 잘 작동합니다. 바벨 사전 설정을 .babelrc 파일로 설정하면됩니다.
— peter

10
이 특정 사전 설정을 사용하여이 작업을 수행했습니다.echo '{ "presets": ["es2015"] }' > .babelrc
— killthrush

39

@bebraw가 제안하는 것의 대안으로 ES6 + 구문을 사용하여 JavaScript 자동화 스크립트를 만들 수 있습니다.

// tools/bundle.js

import webpack from 'webpack';
import webpackConfig from './webpack.config.js'; // <-- Contains ES6+

const bundler = webpack(webpackConfig);

bundler.run(...);

그리고 babel로 실행하십시오.

$ babel-node tools/bundle

추신 : 더 복잡한 빌드 단계를 구현해야 할 때 JavaScript API를 통해 웹 팩을 호출하는 것이 명령 줄을 통해 호출하는 것보다 더 나은 방법 일 수 있습니다. 예를 들어 서버 측 번들이 준비되면 Node.js 앱 서버를 시작하고 Node.js 서버가 시작된 직후 BrowserSync dev 서버를 시작하십시오.

또한보십시오:


2
약간 복잡하지만 이것이 바로 반응 스타터 키트가 사용하는 것입니다. 가장 좋은 답변이어야합니다.
— darkbaby123

20

또 다른 방법은 다음과 같은 npm 스크립트를 사용하여 다음 "webpack": "babel-node ./node_modules/webpack/bin/webpack"과 같이 실행하는 것 npm run webpack입니다.


webpack에 사용자 정의 구성을 전달할 때 작동하지 않는 것 같습니다 babel-node ./node_modules/webpack/bin/webpack --config custom-webpack.config
— Abhinav Singi

16

내가 웹팩 2. 실행 Juho의 솔루션 @ 점점 문제가 있었다 웹팩 마이그레이션 문서를 당신이 바벨 모듈 분석의 설정하는 것이 좋습니다 :

웹팩에서 사용할 수 있도록 이러한 모듈 기호를 구문 분석하지 않도록 Babel에 알리고 싶을 것입니다. .babelrc 또는 babel-loader 옵션에서 다음을 설정하여이 작업을 수행 할 수 있습니다.

.babelrc :

{
    "presets": [
         ["es2015", { "modules": false }]
    ]
}

슬프게도 이것은 자동 babel register 기능과 충돌합니다. 풀이

{ "modules": false }

babel 구성에서 일이 다시 실행되었습니다. 그러나 이로 인해 트리 셰이 킹이 중단되므로 전체 솔루션 에는 로더 옵션의 사전 설정을 덮어 쓰는 것이 포함됩니다 .

module: {
    rules: [
        {
            test: /\.js$/,
            include: path.resolve('src'),
            loader: 'babel-loader',
            options: {
                babelrc: false,
                presets: [['env', {modules: false}]]
            }
        }
    ]
}

편집 , 2017 년 11 월 13 일; Webpack 구성 스 니펫을 Webpack 3으로 업데이트했습니다 (@ x-yuri 덕분에). 이전, Webpack 2 스 니펫 :

{
    test: /\.js$/,
    exclude: ['node_modules'],
    loader: 'babel',
    query: {
        babelrc: false,
        presets: [
            ['es2015', { modules: false }],
        ],
    },
},

2
요즘 (Webpack 3) 아마도 다음과 같이 보일 것입니다 : module:{rules: [{test: /\.js$/, include: path.resolve('src'), loader: 'babel-loader', options: {babelrc: false, presets: [['env', {modules: false}]]}}]}( gist ). -loader접미사는 더 이상 선택 사항이 아닙니다. 피하고 exclude선호하십시오 include. 포함 / 제외의 문자열은 절대 경로 인 경우에만 작동 합니다. query로 이름이 변경되었습니다 options.
— x-yuri

또한, 당신이 원하는하지 않도록하시기 바랍니다 분명히 {modules: false}에서 .babelrc사용할 수 있도록 import에서이야 ' webpack.config.babel.js.
— x-yuri

Webpack 4 -loader접미사 webpack.js.org/migrate/3/…를
— kmmbvnr

12

이것은 정말 쉽지만, 어떤 대답에서도 나에게 분명하지 않았으므로 다른 사람이 나와 같은 혼란 스러울 경우 :

.babel확장명 앞에 파일 이름의 일부를 추가 하십시오 ( babel-register종속성으로 설치 되었다고 가정 ).

예:

mv webpack.config.js webpack.config.babel.js

1
webpack 자체가 이미 ES6 모듈 구문을 지원하므로 프로젝트를 ES5와 호환 할 필요가 없기 때문에 babel을 사용하지 않습니다. 여전히 필요한 구성 파일 일뿐 require입니다. 이상하지 않습니까?
— Kokodoko

재미 있어요! 나는 몰랐다. 이것을 다시 방문해야합니다. 설정 파일이 여전히 필요하다는 것은 이상합니다
— Dmitry Minkovsky

11

이것은 webpack 4를 사용하여 나를 위해 일한 것입니다.

에서 package.json:

"scripts": {
    "dev": "cross-env APP_ENV=dev webpack-serve --require @babel/register"
},

"devDependencies": {
    "@babel/core": "^7.0.0-rc.1",
    "@babel/register": "^7.0.0-rc.1",
    "@babel/preset-env": "^7.0.0-rc.1",
    "babel-plugin-transform-es2015-modules-commonjs": "^6.26.2"
},

"babel": {
  "presets": [
    ["@babel/preset-env", {
      "targets": {
        "node": "current"
      }
    }]
  ],
  "plugins": [
    "transform-es2015-modules-commonjs"
  ]
}

각 의존성이 어떻게 사용되는지 명확하게 볼 수 있으므로 놀랄 일은 없습니다.

참고 webpack-serve--require 를 사용하고 있지만 webpack대신 명령 을 사용하려면로 바꾸십시오 webpack --config-register. 두 경우 @babel/register모두이 작업을 수행하는 데 필요합니다.

그리고 그게 다야!

yarn dev

그리고 당신은 es6구성에서 사용할 수 있습니다 !


의 경우 명령 과 동일한 옵션을 webpack-dev-server사용하십시오.--config-registerwebpack


노트:

구성 파일의 이름을 webpack.config.babel.js(허용 된 답변에서 제안한대로) 바꿀 필요가 없습니다 . webpack.config.js잘 작동합니다.


웹 서비스가 더 이상 사용되지 않는 것 같습니다. webpack-dev-server로이 작업을 수행하는 방법에 대한 아이디어가 있습니까? 나는 워드 프로세서에 대한 --require 옵션을 확인할 수 없습니다 : webpack.js.org/configuration/dev-server/#devserver
— 크리스티앙 라미레즈

1
@CrhistianRamirez, --config-register옵션을 사용하십시오 . 에 대한 또한 REPO webpack-serve: 여기로 이사 github.com/shellscape/webpack-serve
— smac89

1
멋있는! 그것은 나를 위해 일했다. 내 스크립트 모양은 다음과 같습니다. webpack --config-register @babel/register --config webpack/development.config.jswebpack 구성이 폴더에 있기 때문에 --config를 구체적으로 지정해야했습니다. 감사합니다!
— Crhistian Ramirez

6

또 다른 방법은 노드에 require 인수를 사용하는 것입니다.

node -r babel-register ./node_modules/webpack/bin/webpack

이 방법을 찾을 전자 반응 - 보일러 ,보기에서 build-main와 build-renderer스크립트.


장관-Electron을보고 별도의 서버를 시작했을 때, 당신의 대답은 완벽하게 도움이되었습니다! :)
— Matt

6

위한 구성 바벨 7 및 웹팩 4

package.json

    ...
    "scripts": {
        "start": "webpack-dev-server --env.dev",
        "build": "webpack --env.prod",
    },
    "keywords": [],
    "author": "",
    "license": "ISC",
    "devDependencies": {
        "@babel/core": "^7.0.0",
        "@babel/plugin-proposal-class-properties": "^7.0.0",
        "@babel/preset-env": "^7.0.0",
        "@babel/preset-react": "^7.0.0",
        "@babel/register": "^7.0.0",
        "babel-loader": "^8.0.0",
        ...
        "webpack": "^4.17.2",
        "webpack-cli": "^3.1.0",
        "webpack-config-utils": "^2.3.1",
        "webpack-dev-server": "^3.1.8"

.babelrc

{
    "presets": ["@babel/preset-env", "@babel/preset-react"],
    "plugins": ["@babel/plugin-proposal-class-properties"]
}

webpack.config.babel.js

import webpack from 'webpack';
import { resolve } from 'path';

import { getIfUtils, removeEmpty } from 'webpack-config-utils';

export default env => {
    const { ifProd, ifNotProd } = getIfUtils(env);

    return {
        mode: ifProd('production', 'development'),
        devtool: ifNotProd('cheap-module-source-map'),
        output: {
            path: resolve(__dirname, ifProd('prod', 'dev')),
            filename: 'bundle.js'
        },

이것은 여전히 나를 위해 작동하지 않지만 IMHO는 가장 최신의 가장 깨끗한 예입니다 (클래스 속성 관련 항목은 현재 작업에 불필요한 것입니다).
— rawpower

4

로 이름 webpack.config.js을 바꾸십시오 webpack.config.babel.js.

그런 다음 .babelrc에서 : {"presets": ["es2015"]}

그러나 babel-cli에 다른 babel 구성을 사용하려는 경우 .babelrc는 다음과 같이 보일 수 있습니다.

{
  "env": {
    "babel-cli": {
      "presets": [["es2015", {"modules": false}]]
    },
    "production": {
      "presets": ["es2015"]
    },
    "development": {
      "presets": ["es2015"]
    }
  }
}

그리고 package.json에서 :

{
  "scripts": {
    "babel": "BABEL_ENV='babel-cli' babel src -d dist/babel --source-maps",
    "build-dev": "NODE_ENV='development' webpack -d --progress --profile --colors",
    ...
  },
  ...
}

바보이지만 {"modules": false}다른 환경을 사용하지 않으면 webpack이 중단됩니다.

.babelrc에 대한 자세한 내용은 공식 문서를 확인하십시오 .


4

대한 타이프 : 직선에서 https://webpack.js.org/configuration/configuration-languages/

npm install --save-dev typescript ts-node @types/node @types/webpack
# and, if using webpack-dev-server
npm install --save-dev @types/webpack-dev-server

그런 다음 webpack.config.ts 를 작성하십시오.

import path from 'path';
import webpack from 'webpack';

const config: webpack.Configuration = {
  mode: 'production',
  entry: './foo.js',
  output: {
    path: path.resolve(__dirname, 'dist'),
    filename: 'foo.bundle.js'
  }
};

export default config;

commonjs를 대상으로하지 않는 경우 플러그인을 사용하여 웹 팩 구성에 대해 별도의 tsconfig 파일을 가질 수있는 플러그인에 대한 자세한 내용은 링크를 확인하십시오 (ts-node에 의존하기 때문에 이것이 작동해야합니다).


이 덕분에 webpack.config.js에서 작동하는 모듈을 얻을 수는 없지만 대신 TypeScript를 사용하면 행복합니다.
— Paul Watson

3

의견을 말할 충분한 담당자가 없지만 TypeScript 사용자에게 위의 @Sandrik와 비슷한 솔루션을 추가하고 싶었습니다.

ES6 구문이 포함 된 webpack 구성 (JS 파일)을 가리키는 데 사용하는 두 개의 스크립트가 있습니다.

"start-dev": "./node_modules/.bin/ts-node ./node_modules/webpack-dev-server/bin/webpack-dev-server.js --config ./webpack/webpack.config.dev.js"

과

"build": "./node_modules/.bin/ts-node ./node_modules/webpack/bin/webpack.js --config webpack/webpack.config.js"


2

npm 스크립트와 함께하는 가장 좋은 방법은

node -r babel-register ./node_modules/webpack/bin/webpack

Babel 요구 사항에 따라 나머지 스크립트를 구성하십시오.


2

수많은 문서 후에 ...

  1. es2015 사전 설정 (env !!! 아님)을 설치하고 추가하십시오.

    .babelrc:
    {
        "presets": [
             ["es2015", { "modules": false }]
        ]
    }
    
  2. 귀하의 이름 webpack.config.js을webpack.config.babel.js


2

Webpack 4 및 Babel 7 사용

ES2015를 사용하도록 웹팩 구성 파일을 설정하려면 Babel이 필요합니다.

개발자 의존성 설치 :

npm i -D  webpack \
          webpack-cli \
          webpack-dev-server \
          @babel/core \
          @babel/register \
          @babel/preset-env
npm i -D  html-webpack-plugin

.babelrc파일을 작성 하십시오.

{
  "presets": ["@babel/preset-env"]
}

웹팩 구성을 작성하십시오 webpack.config.babel.js.

import { resolve as _resolve } from 'path';
import HtmlWebpackPlugin from 'html-webpack-plugin';

const config = {
  mode: 'development',
  devServer: {
    contentBase: './dist'
  },
  plugins: [
    new HtmlWebpackPlugin({
      filename: 'index.html',
      template: 'src/index.html'
    })
  ],
  resolve: {
    modules: [_resolve(__dirname, './src'), 'node_modules']
  }
};

export default config;

다음에서 스크립트를 작성하십시오 package.json.

  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "build": "webpack",
    "start": "webpack-dev-server --open"
  },

실행 npm run build및 npm start.

웹팩 구성은 다음 디렉토리 구조의 샘플 프로젝트를 기반으로합니다.

├── README.md
├── package-lock.json
├── package.json
├── src
│   ├── Greeter.js
│   ├── index.html
│   └── index.js
└── webpack.config.babel.js

샘플 프로젝트 : Babel을 사용한 Webpack 구성 언어


2

웹팩에 es6 추가는 3 단계 프로세스입니다.

  1. 에서 webpack.config.js 추가

    module:{
    
              rules:[
                {
                  test: /\.js$/,
                  loader: 'babel-loader'
                }
              ]
           }
    
    1. 크리에이트 .babel.rc을 하고 그 안에 추가
{
    "presets": ["@babel/env", "@babel/react"],
    "plugins": [
        [
          "@babel/plugin-proposal-class-properties",
        ]
      ]
}
  1. 에 package.json에 추가
npm install @babel/core --save-dev
npm install @babel/preset-env --save-dev
npm install @babel/preset-react --save-dev
npm install @babel/plugin-proposal-class-properties --save-dev
npm install babel-loader --save-dev

당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.