問題:
之前在一些開源項目的源碼裏,以及一些文章裏,見到如下這樣的require/import
路徑,其中包含形如!.
的片段,不知道是什麼意思:
// https://juejin.im/post/6844903504352378894#heading-10
require("any-template-language-loader!./xyz.atl");
var html = anyTemplateLanguage.render("xyz");
// vscode源碼 -- src/vs/base/browser/ui/actionbar/actionbar.ts
import 'vs/css!./actionbar';
答案:
這是webpack
的語法,用於激活loader
的。
在webpack - loaders
下有一句話:
Loaders are activated by usingloadername!
prefixes inrequire()
statements, or are automatically applied via regex from your webpack configuration
意思就是,可以通過loadername!
的方式調用loader
,也可以通過配置文件內的正則規則自動啓用。
因此,對於問題中的兩個例子,
require("any-template-language-loader!./xyz.atl");
表示使用any-template-language-loader
來加載./xyz.atl
這個文件。
vscode同理,
import 'vs/css!./actionbar';
表示使用vs/css
來加載./actionbar.css
這個文件。
而vs/css
這個loader
是在src/vs/css.build.js
這個文件中註冊的:
// vscode - src/vs/css.build.js:360
define('vs/css', new CSSPlugin(cssLoader));