2017-02-28 52 views
6

的巴貝爾plugin docs說:合併與非ENV選項ENV選項時,巴貝爾插件爲了

  • 插件預置之前運行。
  • 插件排序是第一個持續。
  • 預設順序顛倒(從上到下)。

的巴貝爾.babelrc docs說:具體到某個環境

選項被合併到並覆蓋非ENV特定選項。

文檔沒有說明它們是如何合併的。

我正在使用樣板文件React項目react-slingshot,我想利用類屬性轉換。該項目使用babel-preset-stage-1,其中包括babel-plugin-transform-class-properties。類的屬性變換應該讓我寫這樣的代碼:

class Example extends Component { 
    static propTypes = { 
    ... 
    } 
} 

在該項目中的.babelrc是:

{ 
    "presets": [ 
    "react", 
    "stage-1" 
    ], 
    "env": { 
    "development": { 
     "presets": [ 
     "latest", 
     "react-hmre" 
     ] 
    }, 
    "production": { 
     "presets": [ 
     ["latest", { 
      "es2015": { 
      "modules": false 
      } 
     }] 
     ], 
     "plugins": [ 
     "transform-react-constant-elements", 
     "transform-react-remove-prop-types" 
     ] 
    }, 
    "test": { 
     "presets": [ 
     "latest" 
     ] 
    } 
    } 
} 

但是使用這個時候原樣,我得到:

Module build failed: SyntaxError: Missing class properties transform. 

    5 | class Example extends Component { 
> 6 |  static propTypes = { 
    | ^
    7 |  ... 
    8 |  } 
    9 | 

類屬性轉換就在那裏,但顯然這個排序是失控的。

我沒有得到它通過手動合併非ENV預置到ENV預設沒有任何錯誤編譯,但現在有很多重複的:

{ 
    "env": { 
    "development": { 
     "presets": [ 
     "latest", 
     "react-hmre", 
     "stage-1", 
     "react" 
     ] 
    }, 
    "production": { 
     "presets": [ 
     ["latest", { 
      "es2015": { 
      "modules": false 
      } 
     }], 
     "stage-1", 
     "react" 
     ], 
     "plugins": [ 
     "transform-react-constant-elements", 
     "transform-react-remove-prop-types" 
     ] 
    }, 
    "test": { 
     "presets": [ 
     "latest", 
     "stage-1", 
     "react" 
     ] 
    } 
    } 
} 

有什麼方法來指定插件順序何時使用env和非env選項?

回答

0

.babelrc env繼承像類一樣,它沒有深度複製預設/ plugins.so這就是爲什麼babel產生預設&開發人員以不同方式使用的插件。您可以結合預設/插件共享東西..babelrc env繼承如下:

Object.assgin({presets:['es2015']},env.development); 
//it not merge your presets,that I have tested. 
// if your env.development have a presets:['es2017'] then use es2017 otherwise use es2015