【问题标题】:Transpiling React code, but leave ES6 alone转译 React 代码,但不要理会 ES6
【发布时间】:2017-04-07 15:30:27
【问题描述】:

我正在使用 ES6/React/Redux babel 和 Gulp 编写 Chrome 扩展。

我使用的是 babel 预设 es2015,stage-2 和 react。

然后我意识到,由于我只针对 Chrome,我可以摆脱 es2015/estage-2 阶段,因为它受 Chrome 支持。

所以我首先尝试的是获取 .babelrc 并删除对 es2015 和 stage-2 的引用。

没那么快...在运行 webpack 之前 gulp 脚本无法运行。 我首先尝试的是只使 gulp 文件与 ES5 兼容。

然后我得到了不支持扩展运算符的错误,所以我重新添加了“stage-2”加载器。

然后我在不同的模块中遇到错误:

> WARNING in ./background/src/index.html Module parse failed:
> /my_path/my_project/src/index.html Unexpected token (1:0) You may need
> an appropriate loader to handle this file type. SyntaxError:
> Unexpected token (1:0)
>     at Parser.pp$4.raise (/my_path/my_project/node_modules/acorn/dist/acorn.js:2221:15)

为了帮助理解我的代码的结构,它位于 3 个主要文件夹中: 背景内容弹出窗口。每个代表一个 Chrome 环境。 对于每一个,我都有一个单独的 webpack.config.js 文件,类似于这个:https://pastebin.com/hseVyQaw 然后,Gulp 为每个配置文件调用 webpack,并在构建过程中为每个配置文件生成捆绑输出文件。

有一种方法可以使 Gulp/Webpack 与 ES6 语法一起工作,而不是为部署进行转换? 解决这个问题的最佳方法是什么?

Gulp 版本

> [17:32:27] Requiring external module babel-register 
> [17:32:27]CLI version 3.9.1 
> [17:32:27] Local version 3.9.1

Webpack 版本:1.14.0

更新 按照@Michael Jungo 的建议添加 html-loader 后,它似乎运行良好,但它给了我一个警告,不知道忽略它有多糟糕:

WARNING in ./background/src/index.js
Critical dependencies:
17:29-52 the request of a dependency is an expression
 @ ./background/src/index.js 17:29-52

更新 2 哦,Chrome 抱怨我的扩展程序的模块语法,但根据我读到的内容,它应该是受支持的:

Uncaught SyntaxError: Unexpected token import

【问题讨论】:

    标签: reactjs google-chrome-extension webpack gulp babeljs


    【解决方案1】:

    您的错误与 babel 或任何 ES6 功能无关。您正在尝试导入 HTML 文件 ./background/src/index.html,但在您发布的配置中,.html 没有可以处理这些文件的规则,因此 webpack 告诉您您可能需要一个适合此文件类型的加载器.

    您可以使用html-loader 并将以下规则添加到您的loaders 数组中:

    {
      test: /\.html$/,
      loader: 'html-loader'
    }
    

    至于您的 babel 配置,它应该可以按您的意愿工作。请记住,如果您使用的是 ES 模块 (import/export),您仍然需要转译它们或切换到支持它们的开箱即用的 webpack 2。此外,UglifyJs 不理解 ES6 语法,如果你想 uglify ES6,你必须使用 babilibabili-webpack-plugin 之类的替代方法。

    【讨论】:

    • 谢谢,我会试试的。我正在考虑迁移到 webpack2,但由于它仍处于测试阶段,我不确定。
    • 已经发布很久了,第一次发布v2.2.0是在1月份,现在的版本是v2.3.3是4天前发布的。
    • 好的,我试试看。所以我尝试只添加html模板......并且只运行webpack(没有gulp),它无法理解传播运算符......所以我只重新添加了“stage-2”,它似乎有效,但是它给了我一个警告:pastebin.com/m5yPUFYA 并且构建的文件仍在 ES5 中。我会尝试一下 webpack2,我希望我可以让它在那里工作。
    猜你喜欢
    • 2018-11-08
    • 1970-01-01
    • 2018-06-19
    • 1970-01-01
    • 1970-01-01
    • 2017-12-30
    • 1970-01-01
    • 2015-12-11
    • 1970-01-01
    相关资源
    最近更新 更多