跳至主要內容

常見問題集

為什麼 for...of 的輸出如此冗長且醜陋?

為了符合規範,迭代器的回傳方法必須在錯誤時呼叫。另一種方法是使用 Babel 7.13 中引入的假設,例如 ArrayLikeIsIterableIterableIsArray,但請注意,如果您使用假設,則有許多注意事項需要了解,而且您自願選擇不遵守規範。

請參閱 babel/rfcs#5google/traceur-compiler#1773babel/babel#838 以取得更多資訊。

為什麼箭頭函式中的 thisarguments 會重新對應?

箭頭函式並非等同於一般函式。例如,箭頭函式中的 argumentsthis 參照它們的外部函式

JavaScript
const user = {
firstName: "Sebastian",
lastName: "McKenzie",
getFullName: () => {
// whoops! `this` doesn't actually reference `user` here
return this.firstName + " " + this.lastName;
},
// use the method shorthand in objects
getFullName2() {
return this.firstName + " " + this.lastName;
},
};

請參閱 babel/babel#842babel/babel#814babel/babel#733babel/babel#730 以取得更多資訊。

為什麼 this 會重新對應至 undefined

Babel 假設所有輸入程式碼都是 ES2015 模組。ES2015 模組隱含為嚴格模式,這表示頂層 this 在瀏覽器中不是 window,在 node 中也不是 exports

如果您不想要這種行為,您可以選擇在 plugin-transform-modules-commonjs 中停用 strict

請注意:如果您這麼做,您將有意偏離規格,這可能會導致未來的互操作問題。

救命啊?!我只想像在 5.x 中一樣使用 Babel!現在一切都太複雜了!

我們聽到了!Babel 6 需要一點點設定才能開始使用。 我們認為這是最好的,並已新增 預設值 來簡化此轉換。

從 Babel 5.x 升級到 Babel 6

Babel 6 的核心是 外掛程式。您需要哪些外掛程式完全取決於您的特定設定,但只要新增以下 設定檔,即可取得 Babel 5 中的所有相同轉換

babel.config.json
{
"presets": ["env", "react", "stage-2"]
}
npm install babel-preset-env babel-preset-react babel-preset-stage-2 --save-dev

另請參閱我們的 設定 Babel 6 部落格文章。

所有文件都到哪裡去了?

Babel 6 移除了許多選項,取而代之的是 外掛程式,因此許多文件不再適用。

對於每個已移除的選項,都應該有一個對應的外掛程式。我們可能遺漏了一些東西,如果您認為是這樣,請 開啟一個議題

Babel 是個開源專案,我們感謝所有我們能獲得的貢獻。如果您能透過向 babel.github.io 儲存庫提交拉取請求來協助文件,請幫忙。

我如何從原始碼建立 Babel?

請參閱 建置說明

我如何對 Babel 做出貢獻?

請參閱 貢獻

為什麼我收到語法錯誤/意外的符號?

最有可能的情況是您沒有包含支援該功能的外掛程式/預設集。(也有可能是解析器中的錯誤,或實際上是語法錯誤)。

為何特定 babel-x 套件未更新?

我們目前使用 Lerna 的固定版本控管 系統。

我們為所有套件設定一個全域版本。當我們發布時,唯一會更新的套件是實際有變更的套件(我們對該資料夾執行 git diff)。

如果我們只將 babel-plugin-transform-exponentiation-operator 更新至 6.x.x,由於其他相依項使用 ^,因此目前我們不會為所有套件發布新版本。

例如,Babel v6.6.0 發布 並不表示所有套件現在都是 6.6.0。

提示

若要確定您使用的是最新套件版本,您可能需要移除 node_modules 並重新 npm install