问题
我觉得这应该比它现在的情况更加直截了当。我需要从前端访问所有我的javascript库,并且由于我正在将其集成到旧系统中,所以我无法从前端调用require("bundle.js");
。通过<script>
标签导入这些文件的前端页面的全局范围内必须可以访问捆绑文件的全局范围内的所有内容。
因此,我需要改变旧有的方式:
<script src="js/jquery.js"></script>
<script src="js/silly.js"></script>
<script>
$(silly()); // Some function in silly.js's global scope
</script>
给新人:
<script src="js/bundle.js"></script>
<script>
$(silly()); // Some function in silly.js's global scope
</script>
我尝试过的方法
expose-loader:如果我没有100个全局变量需要它显式查找,那么这个方法完全可行。
ProvidePlugin:只能让库看到其他库。在我的当前设置下,我也不能显式地编写我需要的所有全局变量(会不断添加更多变量)。
我需要什么
为了更加清晰明了,我需要webpack.config.js
看起来像以下其中一种选项:
// Everything is wrapped in module.exports and other irrelevant things
plugins: [
new StaticLibraryMergerSuperNeatPlugin("js/*.js")
]
// ...
或者:rules: [
{
test: /\.js$/,
use: [
"neat-merging-cool-loader",
"babel-loader"]
}
]
// ...
我这样做有问题吗?
我是否忽略了明显的解决方案?
Tl;Dr:
当通过 <script src="js/bundle.js"></script>
在前端 HTML 页面上导入时,如何使我的捆绑 JS 文件中的全局变量暴露到全局作用域?
Btw: 如果有人是 webpack 专家并且知道为什么这种方法不好,请在下面发帖,并简要说明,以便我可以修复自己的生活。
window
对象上声明它们。你也可以使用一个文件作为入口点,然后说window["silly"] = require("silly.js")
等等。不管怎样,这就是我所做的。 - mhodges