2015-12-19 48 views
5

使用Babel 6,我正在嘗試而不是在我編譯的代碼中有"use strict"爲什麼「transform-es2015-modules-commonjs」在Babel 6中添加「use strict」?

我發現,它的"transform-es2015-modules-commonjs" plugin(在"es2015" preset)這就是添加它。

the source-code似乎inherit "babel-plugin-transform-strict-mode",這要是我刪除它,它仍然能正常工作,即它編譯成import "…"沒有require(…)添加「使用嚴格」。

那麼,爲什麼「變換 - es2015模塊 - commonjs」強迫嚴格模式?

回答

7

在ES6規範,有兩種模式,其中一個文件進行處理:

  1. 作爲「腳本」,它通常會盡我們習慣於在一個標準的JS環境

    不允許使用ES6模塊語法,並且出於向後兼容性的原因,如果內容的前綴指令爲"use strict";,則僅將內容視爲嚴格。

  2. 作爲「模塊」

    ES6模塊語法是允許的,並且所有代碼自動是在所有情況下嚴格的模式。

因爲ES6模塊語法是緊密相連的東西是否是一個模塊或一個腳本,如果事情是「模塊」,它會自動嚴格,巴貝爾使用的transform-es2015-modules-commonjs的派駐同時啓用這兩個轉變時間。

即使您只啓用了模塊轉換本身並排除了嚴格模式,您所編寫的所有代碼在技術上都是無效的,只要您試圖在真正的ES6模塊環境中使用ES6代碼,就會嚴格不管你喜不喜歡。

如果你不希望你的代碼是嚴格的,我會建議禁用transform-es2015-modules-commonjs轉換和使用CommonJS模塊,因爲他們沒有這種嚴格模式的要求。

相關問題