【问题标题】:redux-websocket-autoreconnect Webpack compilation errorredux-websocket-autoreconnect Webpack 编译错误
【发布时间】:2017-12-11 22:42:13
【问题描述】:

我有一个项目需要使用 redux-websocket-autoreconnect

运行 webpack 时出现错误:

ERROR in ./~/redux-websocket-autoreconnect/src/index.js
Module parse failed: C:\workspaces\Engineering\projects\wcc\static\releaseBranches\25.X.X\src\clients\default\pmxd\node_modules\redux-websocket-autoreconnect\src\index.js Unexpected token (21:15)
You may need an appropriate loader to handle this file type.
| const createMiddleware = () => {
|   // Hold a reference to the WebSocket instance in use.
|   let websocket: ?WebSocket;
|   let websocketConfig: ?Config
|
 @ ./app/store/configure.store.jsx 40:35-75
 @ ./app/app.jsx
 @ multi babel-polyfill ./app/app.jsx

在 webpack.config.js 我有这个:

module: {
    rules: [
      {
        loader: 'babel-loader',
        query: {
          presets: ['react', 'flow', 'es2015', 'stage-0'],
                    plugins: ['react-html-attrs', 'transform-class-properties', 'transform-decorators-legacy'],
        },
        test: /\.jsx?$/,
        exclude: /(node_modules|bower_components|WidgetLib|console)/
      },
      {
        loader: 'babel-loader',
        query: {
          presets: ['flow', 'es2015', 'stage-0']
        },
        test: /node_modules\/redux-websocket-autoreconnect/
      },....

我的猜测是错误显然是关于编译器无法识别 index.js 中的 es2015 代码,基本上是这样的:

const createMiddleware = () => {
  // Hold a reference to the WebSocket instance in use.
  let websocket: ?WebSocket;
  let websocketConfig: ?Config

  /**
   * A function to create the WebSocket object and attach the standard callbacks
   */
  const initialize = ({ dispatch }, config: Config) => {
    // Instantiate the websocket.
    websocket = createWebsocket(config);
    websocketConfig = config

错误发生在 Windows 10 上。(在 Mac 上编译正常)

使用 webpack@2.7.0、redux@3.7.2、react@15.6.2

知道可能缺少什么吗?

谢谢!

【问题讨论】:

  • 从 webpack 中移除带有test: /node_modules\/redux-websocket-autoreconnect/ 的规则,该库已经被转译了。

标签: reactjs ecmascript-6 react-redux


【解决方案1】:

一种方法是通过发布自己编译包

  1. yarn add matiere-noire/redux-websocket-autoreconnect
  2. cd node_modules/redux-websocket-autoreconnect
  3. yarn && yarn build
  4. 编辑package.json并将main指向dist"main": "dist/index.js"

第二种方法是用你的 webpack 构建它 根据包维护者.babelrc 的说法,您需要几个插件。

  {
    loader: 'babel-loader',
    query: {
      presets: ['es2015'],
      plugins: ['transform-object-rest-spread', 'transform-flow-strip-types']
    },
    test: /node_modules\/redux-websocket-autoreconnect/
  }

【讨论】:

  • 我删除了建议的配置代码,但错误仍然存​​在。 configure.store 中还有 import 语句。还有其他想法吗?谢谢
  • 我刚刚检查了package.jsonmatiere-noire/redux-websocket-autoreconnect ,他没有提供包的转译版本。这就是您看到错误的原因。使用 webpack 将其拉入并构建它是个好主意。我会尽快回复您并提供解决方案。
  • 是的,这就是解决方案!在 Windows 上我必须手动执行此操作似乎很奇怪,而在 Mac 上它可以透明地工作。非常感谢!!
  • 很高兴能帮上忙!
  • 你绝对可以像你尝试的那样构建它,方法是从你的 webpack 中提取它。尝试第二种方法,它可能只是工作。没试过,应该可以的
猜你喜欢
  • 2017-08-21
  • 2016-10-20
  • 1970-01-01
  • 2016-07-01
  • 2020-10-31
  • 1970-01-01
  • 1970-01-01
  • 2017-06-12
  • 2018-01-28
相关资源
最近更新 更多