1

我目前在Safari開發人員預覽測試ES2015覆蓋(其要求,以支持100%ES2015,模塊包括在內)。導入ES2015模塊需要的文件擴展名

我做了一個簡單的測試,使用使用ES2015代碼(與Babel.JS爲transpiling和Browserify捆綁一起)進行開發時,我一直在定期使用相同的語法。

沒想到我的代碼不會不包括.js擴展在import語句工作。那是標準行爲嗎?我以爲你可以省略。

/* filename: scripts/alert.js */ 
 
export default class Alert { 
 
    constructor(message) { 
 
     this.message = message; 
 
    } 
 
    
 
    show() { 
 
     alert(this.message); 
 
    } 
 
} 
 

 
// Another file 
 

 

 
/* filename: scripts/index.js */ 
 
import Alert from "./alert.js"; // this won't work if I change it to 'import Alert from "./alert";' 
 

 
(new Alert("Hello, World!")).show();
<!DOCTYPE html> 
 
<html> 
 
<head> 
 
    <meta charset="UTF-8" /> 
 
    <title>ES2015 Modules</title> 
 
</head> 
 
<body> 
 
    <h1>ES2015 Modules</h1> 
 
    <script async="async" type="module" src"scripts/index.js"> 
 
    </script> 
 
</body> 
 
</html>

+1

的* ModuleSpecifier *用於由環境加載的模塊。這不是語言規定的,所以環境可能需要或不需要'.js'擴展名。 – CodingIntrigue

+0

我不知道。我想我必須始終把'.js'擴展只是可以肯定的,因爲開發(甚至transpilation和捆綁)期間的好做法 – Zorgatone

回答

2

沒想到我的代碼不會沒有包括在import語句的擴展名爲.js工作。那是標準行爲嗎?我以爲你可以省略。

瀏覽器的工作不是爲了預測資源說明符對服務器意味着什麼。您當然可以配置您的服務器,以在不使用.js的情況下通過提供具有.js的匹配文件來響應GET,但這是服務器配置。

有可能會在這方面的發展。例如,現在the spec要求模塊資源說明符以/./開頭。這是專門讓...

...在未來,我們可以讓自定義模塊裝載機給予特殊意義的「裸」進口符,像import "jquery"import "web/crypto"。目前,任何此類導入都將失敗,而不會被視爲相對URL。

+0

我真的以爲當您導入模塊瀏覽器將嘗試加載它get請求中的'.js'擴展名。我的代碼編輯器自動完成建議不帶'.js'擴展名的導入。 我真的不應該忽略那部分,然後 – Zorgatone

+1

@ Zorgatone:它永遠持續下去,甚至像釘牢一樣。 :-)我認爲我們從「保持簡單」開始,然後從那裏發展。 –

+0

我知道:真的!這就是爲什麼我有點驚訝,並興奮地嘗試一下 – Zorgatone

相關問題