![](/img/trans.png)
[英]How to export ES6 class in Javascript without module.exports
[英]How do I avoid adding JavaScript ES6 module exports to global scope for use in normal script blocks?
到目前為止,我已經設法避免了硬核 JavaScript 編程,但看起來這種情況即將結束。 在為一個重要的新項目做准備時,我試圖了解 2018 年的最佳實踐。我閱讀了很多關於不同模塊方法的文章,並使用了一些類似 Dojo 的基於 AMD 的模塊。 在思考如何設計自己的模塊架構時,似乎 ES6 是進行新開發的正確方法。 到目前為止,我了解導入/導出語法,並且已經使用了一些簡單的模塊。 但是我目前將模塊加載回 HTML 並使用它們的技術“感覺不對”。 讓我總結一下我到目前為止所做的工作。
模塊 foo.js
import (bar} from '/Scripts/bar.js'
export function foo() {
bar();
console.log("I'm in foo");
}
模塊 bar.js
export function bar() {
console.log("I'm in bar");
}
索引.html
<head>
<script type="module">
import {foo} from "/Scripts/foo.js"
window.foo = foo; // save for later but "feels wrong"
</script>
</head>
<body>
<script>
// foo(); // doesn't work - foo by itself is only defined in the module scope
window.foo(); // unless "stashed" somewhere else
</script>
</body>
也許這是正確的技術(我發現了一個與我基本相同的舊問題),但我仍然覺得我不應該像這樣污染全局命名空間。 假設這很糟糕,我還應該做什么?
如果您希望該功能在全局范圍內可用,那么實現這一目標的唯一方法就是將其放在全局范圍內(也稱為window
對象)。
然而,將事物放在全局范圍內的一個更好的方法是擁有某種包含所有globals
對象,而不是將函數/屬性名稱直接放在可能導致與其他對象沖突的window
對象上第三方庫。
所以你會說globals.foo()
而不是window.foo()
通過將函數重新導入到許多模塊,可以在任何地方訪問該函數。
您只需要將對象添加到全局范圍內,在該范圍內跨模塊維護和需要狀態。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.