常見問題集
為什麼 for...of
的輸出如此冗長且醜陋?
為了符合規範,迭代器的回傳方法必須在錯誤時呼叫。另一種方法是使用 Babel 7.13 中引入的假設,例如 ArrayLikeIsIterable
和 IterableIsArray
,但請注意,如果您使用假設,則有許多注意事項需要了解,而且您自願選擇不遵守規範。
請參閱 babel/rfcs#5、google/traceur-compiler#1773 和 babel/babel#838 以取得更多資訊。
為什麼箭頭函式中的 this
和 arguments
會重新對應?
箭頭函式並非等同於一般函式。例如,箭頭函式中的 arguments
和 this
參照它們的外部函式
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#842、babel/babel#814、babel/babel#733 和 babel/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 中的所有相同轉換
{
"presets": ["env", "react", "stage-2"]
}
- npm
- Yarn
- pnpm
npm install babel-preset-env babel-preset-react babel-preset-stage-2 --save-dev
yarn add babel-preset-env babel-preset-react babel-preset-stage-2 --dev
pnpm add 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
。