Script-loader
遗憾地将包含的脚本包装成一个字符串,因此您可以使用Blob或类似的东西对其进行评估。但我认为您可能想尝试其他方法。
首先:确保您require("./path/to/a-neat-module.js")
实际上是在拉入文件。转到您输出的捆绑包并筛选代码以确认。如果可能,请使用 npm 安装任何库,这样您就可以简单且便携,只需调用require("a-neat-module")
那么如何让我的非导出变量和函数暴露出来呢?
你不能直接。
在您的入口文件中,调用它将使./js
文件夹和子目录中动态可用的所有导出变量公开:
function requireAll(requireContext) {
return requireContext.keys().map(requireContext);
}
var jsModules = requireAll(require.context("./js", true, /\.js$/));
或者,如果您考虑到特定模块和全局:
window["silly"] = require("./js/silly.js");
window["$"] = window["jQuery"] = require("jquery");
但是,如果您的文件没有导出,它只会增加您的捆绑包的大小。想想如何将代码导出到您的最终包中。这一切都被包装起来了,因此在全局范围内定义的任何变量都成为包装函数的本地变量。
所以,这就是加载器和插件喜欢script-loader
和globals-loader
进来的地方。它们有助于预处理您的文件,以便您以后可以使用。
除此之外,我不知道有任何插件可以帮助通过翻译动态转换您的非导出代码。尝试重写其中一些以支持模块化格式可能是值得的。我知道这不是什么好消息,但可能值得考虑一下使您的 javascript 模块化需要多长时间。几乎每个 js 库都值得使用这种设计流程来避免导入问题。
Ps:你检查ouput.libraryTarget: "this"
过你的配置中的效果吗?有些人在这方面取得了成功。
PPs:你检查过 webpack-raw-bundler吗?它会将您的代码粘贴到保留全局范围的另一个文件中,但它将位于另一个文件中,因此您可以运行后期构建以在最后将两者连接在一起。我在几个前端文件上运行它,以便它们的非导出函数可用,就好像每个文件都包含在它们自己的<script>
标签中一样。但是,您必须小心加载时间和方法重载。