【发布时间】:2017-09-11 08:01:44
【问题描述】:
假设我有一个这样的 HTML 文件:
<!DOCTYPE html>
<meta charset="UTF-8">
<title>Suman tests</title>
<head>
<script src="../dist/suman.js"></script> <-- webpack build here
// how can I do a synchronous require() here, from something
// inside the Webpack build?
</script>
</head>
<body>
</body>
</html>
正如脚本标签中的评论所说,我试图弄清楚:如何从几乎任何旧的 JavaScript 代码中导入/要求从 Webpack 构建内部的东西?
有可能吗?如何? ...我可以在构建中设置全局变量,但我想知道是否还有其他更好的方法。
注意:
我愿意使用 Browserify 而不是 Webpack 来创建包/构建,如果这样可以更容易地从构建中请求模块,从构建外部。
我尝试用 RequireJS 和 SystemJS 来做这件事——这两个工具会让我更容易做我想做的事。但显然,使用 RequireJS 或 SystemJS 从 NPM 包创建深度构建非常困难,在这种情况下,我需要一个包含许多 NPM 依赖的深度构建。我什至尝试使用 TypeScript 转译器来创建深度构建,但无济于事。所以看起来它必须是 Browserify 或 Webpack,但我对任何可能的工作持开放态度。
请注意,如果我们使用 AMD 或 SystemJS,这将很简单:
<head>
<script src="../dist/suman-amd.js"></script> <--AMD build here
<script src="../dist/suman-system.js"></script> <--SystemJS build here
<script>
// using AMD
define(['/a-module-from-amd-build'], function(myMod){
// my unique code goes here
});
// or with SystemJS
System.register('my-module', ['a-module-from-system-build'], function(myMod){
// my unique code goes here
});
</script>
</head>
但是使用 Webpack/Browserify 让做我想做的事情变得有点棘手。
【问题讨论】:
-
你的意思是如何延迟加载模块?因为 webpack 在浏览器运行任何代码之前捆绑了所有的需求。
-
@OmriLuzon 我可以接受延迟加载。但我使用同步这个词是有原因的 :) “同步”的意思是“不是延迟加载”。如果它已经在 Webpack 构建中,那么它已经可以同步加载了……理论上。
-
好吧,如果所有代码在浏览器可以运行之前捆绑在一起,那么同步和异步模块加载就毫无意义。
-
不是真的,你可以加载代码,然后异步加载更多代码。我个人喜欢异步/延迟加载,但在这种情况下,我希望只进行严格同步的 require() 调用。
-
所以你的意思是代码已经在包中,所以不需要它,这是默认行为。
标签: javascript html webpack webpack-2