现有应用程序:我的应用程序正在使用require.js。我的应用程序的好处是其他人可以通过使用require.js编写第三方插件来扩展我的应用程序。
例如:(第三方插件注册) // registering a new plugin { url:'#new-page-url', js:'plugin-folder/new-page-url.js' }
,所以当#new-page-url
在任何地方被击中时,需求js从plugin-folder/new-page-url.js
中消耗js文件。
请注意,在我编译我的应用程序之后,它不包括第三方源代码,因为可以使用requriejs动态获取它们。
问题:,我一直在研究webpack,既然它编译了发行前的所有东西(bundle.js作为起始文件),.How可以像上面的例子那样动态地工作吗?
发布于 2017-10-10 02:15:42
请注意,在我编译我的应用程序之后,它不包括第三方源代码,因为可以使用requriejs动态获取它们。
是的,这就是问题所在。
我所处的情况类似于您的情况,我的一个大型应用程序作为AMD模块的集合,可以在运行时加载编辑模式,这些模式也是AMD模块。这些模式通常不与应用程序绑定。
AFAIK不可能只在Webpack身上复制这样一种可能性,即执行相当于RequireJS‘require([a])
的操作,其中a
是一个变量,其值在构建时无法知道,但在运行时确定。(对于那些可能不熟悉RequireJS的读者来说,我要补充的是,我的意思是第一个论点是[a]
,而不仅仅是a
。RequireJS对两者进行了区分。)
Webpack需要知道它将在构建时将哪些模块捆绑在一起。(“需要知道”意味着它需要知道名称并找到模块的源代码。)因此,它不支持动态加载只有在运行时才知道的模块。如果您阅读了文档或教程,您将遇到与Webpack一起进行动态加载的讨论,但这些讨论不允许执行与require([a])
情况相当的操作。Webpack可以将一个包分成块,并根据需要加载块,但是要想工作,Webpack仍然需要提前知道它所需要的整套模块。这不允许在运行时加载在构建时未知的模块。还有require.context
,但是它允许您在运行时确定您想要的特定模块,而模块来自的集合则是在构建时确定的。如果在构建的时候你知道你将使用A,B,C中的一个,那就好了。但是,如果您在构建时不知道您的模块的名称,或者无法将其源提供给Webpack,那么您就不走运了。
尽管如此,应该可以使用Webpack构建应用程序的核心,并让这个核心直接调用像RequireJS或SystemJS这样的模块加载器。这就是我自己申请的方向,但我还没有跨过那座桥。
https://stackoverflow.com/questions/46658813
复制