React.js 和 webpack - 为啥它不允许 var、let、const?

Posted

技术标签:

【中文标题】React.js 和 webpack - 为啥它不允许 var、let、const?【英文标题】:React.js and webpack - why won't it allow var, let, const?React.js 和 webpack - 为什么它不允许 var、let、const? 【发布时间】:2018-06-20 23:01:54 【问题描述】:

我在这里遇到了一个我无法深入了解的问题。

这是我的 Graph.js 文件中的一个 sn-p:

class Graph extends React.Component 
    @observable newTodoTitle = "";

    s = 40

webpack 报错如下:

ERROR in ./src/components/Graph.js
Module build failed: SyntaxError: Unexpected token (13:6)
2018-01-11T14:56:05.221073500Z 
  11 | 
  12 | 
> 13 |   let s = 40
     |       ^

如果我删除“let”,它编译得很好!

我希望保留 var、let、consts 等,因为我想将大量 javascript 复制并粘贴到此文件中而不会出现这些错误。

这是我的 .babelrc


  "presets": [
    "react",
    "es2015",
    "stage-1"
  ],
  "plugins": ["transform-decorators-legacy"]

这是我的 webpack.config.js:

var path = require('path');
var webpack = require('webpack');

module.exports = 
  devtool: 'eval',
  entry: [
    './src/index'
  ],
  output: 
    path: path.join(__dirname, 'dist'),
    filename: 'bundle.js',
    publicPath: '/static/'
  ,
  plugins: [
    new webpack.HotModuleReplacementPlugin()
  ],
  resolve: 
    extensions: ['.js', '.jsx']
  ,
  module: 
    rules: [
      test: /\.jsx?$/,
      use: ['babel-loader'],
      include: path.join(__dirname, 'src')
    ]
  
;

有什么想法吗?

【问题讨论】:

您确定正确支持@observable 吗? @Anselm 非常感谢。是的,当我删除 let s = 40 行时,一切编译正常 我可能已经找到答案了...***.com/a/37840719/395974 预设顺序错误,将es2015排在首位-不反应。它需要从右到左编译。此外,缺少类属性转换插件,尽管它可能被 stage-1 覆盖,因为它现在是 stage-3 你也可以看看***.com/questions/22156326/… 【参考方案1】:

您正在尝试使用 class-fields 提案(目前是第 3 阶段),您需要 Class properties transform plugin of babel 来支持它。

正如您在文档中看到的,您的语法已关闭。 类字段不需要任何变量声明关键字。

来自docs的示例:

class Counter extends htmlElement 
  x = 0;

  clicked() 
    this.x++;
    window.requestAnimationFrame(this.render.bind(this));
  

  constructor() 
    super();
    this.onclick = this.clicked.bind(this);
  

  connectedCallback()  this.render(); 

  render() 
    this.textContent = this.x.toString();
  

【讨论】:

以上是关于React.js 和 webpack - 为啥它不允许 var、let、const?的主要内容,如果未能解决你的问题,请参考以下文章

react js上的样式导入(使用webpack)

使用 Webpack 4 和 react js 在 scss 中导入字体或图像文件时出错

Node SASS 的 React JS Webpack 失败

Webpack / React.js 中的语法错误 React 中的意外令牌 =

Webpack / Babel / React 构建错误:“未知选项:foo/node_modules/react/react.js.Children”

如何将带有 django 的 react.js webpack 部署到 heroku?