【问题标题】:Webpack fails to build ES6 in external packagesWebpack 无法在外部包中构建 ES6
【发布时间】:2016-05-18 08:53:03
【问题描述】:

我正在尝试在项目中使用 ES6 npm 包(在本例中称为 gamesystem)并使用 webpack(和 babel)构建它无法在外部依赖项中构建任何 ES6 代码,这是为什么呢?如果我具有与具有相对路径的依赖项相同的代码,则它可以正常工作。

应用代码:

'use strict';

import World from 'gamesystem'; // Breaks
//import World from '../node_modules/gamesystem'; // Also breaks
//import World from '../gamesystem'; // Works (copied the same directory gamesystem outside the node_modules directory)

let world = new World();

错误:

ERROR in ./~/gamesystem/World.js
Module parse failed: /home/user/project/node_modules/gamesystem/World.js Line 3: Unexpected token
You may need an appropriate loader to handle this file type.
| 'use strict';
| 
| import System from './System';
| 
| export default class World {
 @ ./src/app.js 3:18-39

Webpack 配置:

'use strict';

// Modules
let WebpackNotifierPlugin = require('webpack-notifier');
let HtmlWebpackPlugin = require('html-webpack-plugin');

let config = {
  entry: {
    app: __dirname + '/../src/app.js'
  },
  devtool: 'source-map',
  devServer: {
    stats: {
      modules: false,
      cached: false,
      colors: true,
      chunk: false
    },
    proxy: require('./devProxy')
  },
  module: {
    loaders: [{
      test: /\.js$/,
      loader: 'babel',
      exclude: /node_modules/,
      query: {
        presets: ['es2015', 'stage-0']
      }
    },
    {
      test: /\.css$/,
      loader: 'style!css'
    },
    {
      test: /\.html$/,
      loader: 'raw'
    }]
  },
  plugins: [
    new WebpackNotifierPlugin(),
    new HtmlWebpackPlugin({
      template: __dirname + '/../src/index.html',
      inject: 'body',
      minify: false
    })
  ]
};

module.exports = config;

【问题讨论】:

    标签: javascript npm ecmascript-6 webpack babeljs


    【解决方案1】:

    您从babel-loader 中明确排除node_modules

    exclude: /node_modules/,
    

    如果你想通过 babel 传递来自 node_modules 的模块,你需要调整它。您可能会考虑这样的显式包含:

    // be sure to req path
    // var path = require('path')
    
    include: [
      // Include everything from your app path
      path.resolve(__dirname, 'my-app-js-path'),
    
      // Include gamesystem modules
      /\bgamesystem\b/,
    ],
    

    【讨论】:

    • 非常感谢!目前 ES6 开发需要很多层,有时很容易迷失 :)
    猜你喜欢
    • 1970-01-01
    • 2015-09-17
    • 2018-03-02
    • 2018-11-12
    • 1970-01-01
    • 1970-01-01
    • 2017-07-25
    • 2021-09-04
    相关资源
    最近更新 更多