错误:缺少类属性转换

Posted

技术标签:

【中文标题】错误:缺少类属性转换【英文标题】:Error: Missing class properties transform 【发布时间】:2016-06-01 17:32:37 【问题描述】:

Error: Missing class properties transform

Test.js:

export class Test extends Component 
  constructor (props) 
    super(props)
  

  static contextTypes = 
    router: React.PropTypes.object.isRequired
  

.babelrc:


  "presets": ["es2015", "react", "stage-0"],
  "plugins": ["transform-class-properties"]

package.json:

"babel-core": "^6.5.1",
"babel-eslint": "^4.1.8",
"babel-loader": "^6.2.2",
"babel-plugin-react-transform": "^2.0.0",
"babel-plugin-transform-class-properties": "^6.5.2",
"babel-preset-es2015": "^6.5.0",
"babel-preset-react": "^6.5.0",
"babel-preset-stage-0": "^6.5.0",
"babel-register": "^6.5.2",

我搜索了网络,所有修复都围绕着:升级到 babel6,将“stage-0”的顺序切换到“es2015”之后。我都做了。

【问题讨论】:

【参考方案1】:

你需要安装@babel/plugin-proposal-class-properties:

npm install @babel/plugin-proposal-class-properties --save-dev

yarn add @babel/plugin-proposal-class-properties --dev

并将以下内容添加到您的 Babel 配置文件中 - 通常是 .babelrcbabel.config.js

"plugins": ["@babel/plugin-proposal-class-properties"],

【讨论】:

有了新包,“插件”部分应该是这样的:plugins: ['@babel/plugin-proposal-class-properties']【参考方案2】:

如果你使用的是 Babel 7.4 或更新版本,@babel/pollify 已被弃用。

安装 core-jsregenerator-runtime@babel/plugin-proposal-class-propertiesbabel-plugin-transform-class-properties 软件包。

yarn add core-js regenerator-runtime @babel/plugin-proposal-class-properties babel-plugin-transform-class-properties --dev
// or
npm install core-js regenerator-runtime @babel/plugin-proposal-class-properties babel-plugin-transform-class-properties --save-dev

然后,添加到.babelrcbabel.config.js

"plugins": ["@babel/plugin-proposal-class-properties"],

最后,在你的主 js 文件中添加这行:

import "core-js/stable";
import "regenerator-runtime/runtime";

取自: https://***.com/a/54490329/9481448

【讨论】:

【参考方案3】:

当我不假思索地将一些箭头函数放入我的一个类中时,我遇到了这个问题。一旦我将箭头函数更改为常规函数/方法定义,错误就解决了。

【讨论】:

在使用 WebComponents 和提供帮助的 lit-element 库时。 如果您不打算将箭头函数包含为类属性,则可能值得考虑此修复,因为它们在转换为 ES2017 后有一些明显的缺点。见medium.com/@charpeni/…【参考方案4】:

以防万一有人仍然面临同样的问题, 以下博客文章确实帮助了我: https://devblogs.microsoft.com/typescript/typescript-and-babel-7/

就我而言(babel 7.9.6、typescript 3.9.2、webpack 4.43.0),我必须执行以下操作:

    运行以下命令:

    npm install --save-dev @babel/preset-typescript @babel/preset-env @babel/plugin-proposal-class-properties @babel/plugin-proposal-object-rest-spread
    

    创建 .babelrc 文件(是的,我以前没有,它确实工作得很好) 包含以下内容:

    
        "presets": [
            "@babel/env",
            "@babel/preset-typescript"
        ],
        "plugins": [
            "@babel/proposal-class-properties",
            "@babel/proposal-object-rest-spread"
        ]
    
    

【讨论】:

【参考方案5】:

我遇到了同样的错误,我在 .babelrc 中正确订购了我的插件,但它仍然存在。删除我在 webpack 加载器中定义的预设参数修复了它。

以前的 webpack 配置:

module: 
  rules: [
    
      test: /.jsx?$/,
      loader: 'babel-loader',
      include: path.join(__dirname, 'src'),
      exclude: /node_modules/,
      query: 
        presets: ['es2015', 'react']
      
    
  ]

工作 webpack 配置:

module: 
  rules: [
    
      test: /.jsx?$/,
      loader: 'babel-loader',
      include: path.join(__dirname, 'src'),
      exclude: /node_modules/
    
  ]

【讨论】:

【参考方案6】:

在我的情况下,修复是在我的 webpack.config.js 的选项属性中定义 'transform-class-properties' 插件,我使用的是 babel V6

 rules:[
    .....,
    
       test: /\.(js|jsx)$/,
       exclude: /(node_modules|bower_components)/,
       loader: 'babel-loader',
       options:  plugins: ['transform-class-properties']
    
 ]

【讨论】:

【参考方案7】:

终于发现,要消除 Laravel-Mix 项目中的这个错误,在webpack.mix.js 中添加以下代码

mix.webpackConfig(
        module: 
            rules: [
                
                    test: /\.js?$/,
                    exclude: /(node_modules|bower_components)/,
                    loaders: [
                        'babel-loader?presets[]=react,presets[]=es2015,presets[]=stage-0'
                    ]
                
            ],
        
);

【讨论】:

【参考方案8】:

我使用koa-react-view 遇到了同样的问题。从这些答案中获得灵感,最后在koa server.js 中使用以下代码修复它:

const register = require('babel-register');

register(
    presets: ['es2015', 'react', 'stage-0'],
    extensions: ['.jsx']
);

【讨论】:

【参考方案9】:

由于使用了 env 预设,我也遇到了这个错误: "presets": [ "react", "es2015", "stage-0", ["env", "modules": false ]], 在我删除 env 预设后,它运行良好

【讨论】:

【参考方案10】:

我遇到此错误是因为我使用的是stage-3 而不是stage-0

【讨论】:

【参考方案11】:

好的,终于想通了,在我的webpack.config.js 我有:

module: 
    loaders: [
      
        test: /\.js?$/,
        exclude: /(node_modules|bower_components)/,
        loaders: [
          'react-hot',
          'babel?presets[]=react,presets[]=es2015,presets[]=stage-0'
        ]
      
    ]
  

'babel?presets[]=stage-0,presets[]=react,presets[]=es2015'

必须以与.babelrc相同的方式处理,将stage-0切换到es2015之后,它可以完美编译。

【讨论】:

你不需要两者。如果你有一个.babelrc,你可以放弃装载机上的所有参数。 你只是通过调整你的 webpack.config.js 来解决你的问题吗?我面临同样的问题,但我正在使用 browserify,但我无法摆脱它。 我正在使用 browserify 并使用这个 oder "es2015", "react", "stage-0" 为我工作。我把配置放在 .babelrc 中。 嘿@speak,很棒的发现。但是我建议您在此答案中写下正确的配置,因为我首先更改为您的错误配置-_- @lenny.myr 如果您使用的是 browserify,则需要安装 babeljs.io/docs/plugins/preset-stage-0。然后在你的 gulp 任务更新转换为 .transform('babelify', presets: ['es2015', 'react','stage-0'])【参考方案12】:

@speak 是对的,但你需要改变顺序

loaders: [
  'react-hot',
  'babel?presets[]=react,presets[]=es2015,presets[]=stage-0'
]

【讨论】:

以上是关于错误:缺少类属性转换的主要内容,如果未能解决你的问题,请参考以下文章

可移植类库配置文件 78 缺少属性相关的方法/属性

为啥这个 foreach 循环缺少类中的属性?

DjangoRestFramework 类序列化程序缺少“元”属性?

自动生成的实体类中缺少导航属性

AWS DynamoDB:无法取消转换属性错误

Rails 的 ActiveRecord 序列化:attr 方法给出“缺少类或模块错误”