Webpack babel 6 ES6 데코레이터


101

내 번 들러로 webpack을 사용하여 ES6로 작성된 프로젝트가 있습니다. 대부분의 트랜스 파일은 잘 작동하지만 아무 데나 데코레이터를 포함하려고하면이 오류가 발생합니다.

Decorators are not supported yet in 6.x pending proposal update.

바벨 이슈 트래커를 살펴 보았지만 거기에서 아무것도 찾을 수 없었기 때문에 잘못 사용하고 있다고 가정합니다. 내 웹팩 구성 (관련 비트) :

loaders: [
  {
    loader: 'babel',
    exclude: /node_modules/,
    include: path.join(__dirname, 'src'),
    test: /\.jsx?$/,
    query: {
      plugins: ['transform-runtime'],
      presets: ['es2015', 'stage-0', 'react']
    }
  }
]

나는 다른 것, 화살표 기능, 모든 구조 분해에 문제가 없습니다.이게 작동하지 않는 유일한 것입니다.

얼마 전에 작동했던 바벨 5.8로 다운 그레이드 할 수 있다는 것을 알고 있지만 현재 버전 (v6.2.0)에서 작동하도록하는 방법이 있다면 도움이 될 것입니다.


Stage-0 프리셋을 포함했기 때문에 제대로 변형 될 것이라고 생각했습니다. 데코레이터는 변형 데코레이터를 포함해야하는 1 단계 사전 설정의 일부입니다. 바벨 웹 사이트에 쓰여진대로.
Pavlin

@Pavlin 나는 이것이 주문에 문제가 될 수 있는지 생각하고 있습니다 presets.
Sulthan

그럴지도 모른다고 생각했지만 다시 테스트했습니다. 어떤 식 으로든 오류가 발생합니다. 분명히 순서는 중요하지만 여기서는 그게 문제라고 생각하지 않습니다.
Pavlin

답변:


170

이 Babel 플러그인은 저에게 효과적이었습니다.

https://github.com/loganfsmyth/babel-plugin-transform-decorators-legacy

npm i --save-dev babel-plugin-transform-decorators-legacy

.babelrc

{
  "presets": ["es2015", "stage-0", "react"],
  "plugins": [
    ["transform-decorators-legacy"],
    // ...
  ]
}

또는

웹팩

{
  test: /\.jsx?$/,
  loader: 'babel',
  query: {
    cacheDirectory: true,
    plugins: ['transform-decorators-legacy' ],
    presets: ['es2015', 'stage-0', 'react']
  }
}

네이티브 반응

으로 react-native당신이 사용해야 babel-preset-react-native-stage-0하는 대신 플러그인을.

npm i --save babel-preset-react-native-stage-0

.babelrc

{
  "presets": ["react-native-stage-0/decorator-support"]
}

자세한 설명은이 질문과 답변 을 참조하십시오 .


.NET 용 플러그인 만 활성화하고 싶지 않을 것입니다 development.
loganfsmyth

감사합니다 @loganfsmyth. 나는 포함 대답을 업데이트했습니다 production뿐만 아니라
카일 핀리

1
내 말은, 왜 그것을 env블록에 넣을 까요? 당신은 할 수 plugins의 형제로presets
loganfsmyth

1
@ am5255, 여전히 나를 위해 일하는 것 같습니다. 저자에게 문제를 제출해 주시겠습니까? github.com/loganfsmyth/babel-plugin-transform-decorators-legacy/...
카일 핀리에게

1
마침내 이것을 작동시킬 수있었습니다. 나는 밝혀 설치했다 transform-class-properties잘으로 babeljs.io/docs/plugins/transform-class-properties 또한의 문서에 따라 클래스 플러그인을 변환하기 전에 기존 플러그인이 있는지 확인 github.com/loganfsmyth/babel-plugin- 변환 - 장식 - 유산
reectrix

41

babels slack 웹 채팅에 5 분을 보낸 후, 나는 현재 버전의 babel (v6.2)에서 데코레이터가 깨지는 것을 발견했습니다. 유일한 해결책은 현재 5.8로 다운 그레이드하는 것 같습니다.

또한 문제 추적기를 github에서 https://phabricator.babeljs.io 로 옮긴 것 같습니다.

몇 시간 동안 검색 한 후 현재 문서가 매우 열악하고 부족하다는 것을 알게 되었기 때문에이 모든 것을 기록했습니다.


6
이 문제에서 "제한된 최선의 노력"레거시 플러그인이 만들어졌습니다. 제한 사항에 대해서는 readme를 참조하십시오. npmjs.com/package/babel-plugin-transform-decorators-legacy
Jason

트랜스 폼 데코레이터 레거시가 임시 솔루션으로 저를 위해 작동하고 있음을 확인할 수 있습니다.
dvlsg

@Pavlin, 귀하의 답변이 정확하더라도 아래 나열된 플러그인이 현재 허용되는 답변이어야합니다.
Ajax

8

설치 babel-plugin-transform-decorators-legacy는 나 에게만 효과 가 없었습니다 (카르마와 함께 효소를 사용하는 구성이 있습니다). 설치 결과 transform-class-properties: transform-class-propertiestransform-decorators-legacy 의 문서에 따라 레거시 플러그인이 변환 클래스 플러그인 앞에 있는지 확인하여 마침내 작동하게되었습니다.

나는 또한 .babelrc파일을 사용하지 않지만 이것을 내 karma.conf.js파일에 추가하면 나를 위해 일했습니다.

babelPreprocessor: {
  options: {
    presets: ['airbnb', 'es2015', 'stage-0', 'react'],
    plugins: ["transform-decorators-legacy", "transform-class-properties"]
  }
}

나는 또한 그것을 내 로더에 추가했습니다.

loaders: [
  {
    test: /\.js$/,
    loader: 'babel',
    exclude: path.resolve(__dirname, 'node_modules'),
    query: {
      presets: ['airbnb', 'es2015', 'stage-0', 'react'],
      plugins: ["transform-decorators-legacy", "transform-class-properties"]
    }
  },

1
여기저기서 한 시간을 보내면이 일이 저에게 효과적이었습니다. 덕분에 alot을
cjmling

3

변형 데코레이터 플러그인이 필요합니다 : http://babeljs.io/docs/plugins/transform-decorators/


1
여전히 나를 위해 실패했습니다.
amcdnl

3
- @amcdnl 내 인상은 장식을 변환 플러그인 공식 하나이지만은 그동안이 존재에 인해 TC39 제약 조건을 구현되지 않은 왼쪽이다 github.com/loganfsmyth/babel-plugin-transform-decorators-legacy
Qiming

@Qiming yup 그게 내가 사용하게 된 것과 바벨 관계자는 심지어 u가 충분히 멀리 파면 .. 그들의 부분에 꽤 끔찍한 아이디어를
말한다

1

프로젝트를 Babel 6에서 Babel 7로 업그레이드했다면 @babel/plugin-proposal-decorators.

Babel 5에서 사용되는 레거시 데코레이터를 지원하려면 .babelrc다음과 같이 구성해야 합니다.

plugins: [
      ['@babel/plugin-proposal-decorators', { legacy: true }],
      ['@babel/plugin-proposal-class-properties', { loose: true }],
]

확인 @babel/plugin-proposal-decorators앞에 오는 @babel/plugin-proposal-class-properties후자의 활용되는 경우.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.