`script-loader`源代码中的`!!`是什么意思?

时间:2017-03-21 06:50:43

标签: javascript webpack

我看到script-loader有一行写

"require(" + JSON.stringify("!!" + path.join(__dirname, "addScript.js")) + ")"

谁能告诉我为什么在这里使用!!?提前谢谢。

4 个答案:

答案 0 :(得分:2)

我真的不想发布"答案"因为我不确定...但是,!是一个标准的webpack加载器分隔符,该调用将返回如下内容:

"!!/var/www/project/addScript.js" 

它没有出现在项目的初始提交中,因此可以理解这是一个解决方法,它被添加为与更新版本的webpack兼容(确切地说是0.9)。您可以看到第一个感叹号已添加here for webpack 0.9 compatibility。第二个是without much explanation (commit "Don't crash in environments without window")

答案 1 :(得分:1)

它只会将path.join()返回的任何内容转换为bool。

答案 2 :(得分:0)

我在NormalModuleFactory.js文件夹的webpack中找到了答案。 第70行:

var noPrePostAutoLoaders = /^!!/.test(request);

当我使用require('./file')时,preLoader对文件有效,当我使用require('!!./file')时,preLoader对文件没有影响。所以我认为!!前缀可以防止preLoader影响文件或让webpack忽略preLoader。

我在webpack 1.x网站https://webpack.github.io/docs/loaders.html#loader-order

中找到了该文档

答案 3 :(得分:0)

一个!将忽略所有后加载程序。

两个!!将忽略前后装入程序。

因此,如果您没有!或只有1个!前缀, 加载程序的输入可能 不是实际的文件,因为可能是 由另一个装载机处理 从您的配置。