像requireJs一样使用webpack扩展应用程序

像requireJs一样使用webpack扩展应用程序

问题描述:

现有应用程序: 我的应用程序使用require.js。 福利我申请的是,其他人可以通过编写使用require.js像requireJs一样使用webpack扩展应用程序

例如第三方插件扩展我的应用程序:(第三方插件注册) // registering a new plugin { url:'#new-page-url', js:'plugin-folder/new-page-url.js' } 所以当#new-page-url任何地方打,requirejs消耗js文件从plugin-folder/new-page-url.js

请注意,以后我编译我的应用程序,它不包括第三方来源,因为他们可以与requriejs

问题在运行中获取: 我一直在寻找webpack,并且因为它编译分发之前的所有内容(bundle.js作为开始文件)。第三方插件如何可以像上面的例子那样工作?

请注意,以后我编译我的应用程序,它不包括第三方来源,因为他们可以在飞行中获取与requriejs

是的,这就是问题所在。

我处于类似于您的情况,我的一个大型应用程序作为AMD模块集合可以在运行时加载编辑模式,这也是AMD模块。这些模式通常不与应用程序捆绑在一起。

AFAIK是不可能复制只的WebPack做的等效的可能性RequireJS” require([a])其中a是一个变量,其值不能在生成时已知的,但在运行时被确定。 (为了不熟悉RequireJS的读者的利益,我会补充说,是的,我的意思是第一个参数是[a]而不仅仅是a。RequireJS区分了两者。)

Webpack需要在构建时知道要将哪些模块捆绑在一起。 (“需要知道”意味着它需要知道名称找到模块的源代码。)所以它不支持动态加载仅在运行时才知道的模块。如果您阅读文档或教程,您将会遇到有关使用Webpack进行动态加载的讨论,但这些不允许进行相当于require([a])的情况。 Webpack可以根据需要将一个bundle拆分成块和加载块,但为了这样工作,Webpack仍然需要提前知道它所需要的整个模块集合。 这不允许在运行时加载在构建时未知的模块。还有require.context,但它允许您在运行时确定您需要哪个特定模块,模块出现的集合是在构建时间处确定的。如果在构建时你知道你将要使用A,B,C中的一个,那很好。但是如果你在构建时不知道模块的名称,或者无法将源代码提供给Webpack,那么你运气不好。

这就是说,应该可以使用Webpack构建应用程序的核心,并且该核心可以直接调用像RequireJS或SystemJS这样的模块加载器。这是我正在用自己的应用程序进入的方向,但我还没有穿过那座桥。

+0

你为我节省了很多时间。我喜欢你的解决方案,但我只是坚持requirejs,因为我需要记住第三方开发人员,如果每个人都在同一组源代码插件上,那么事情会简单得多 – django

+0

例如:在webpack中,编译时会添加jquery。但是对于第三方开发者来说,他会再次添加它,因为他不能从webpack进口。是的,他可以检查窗口。$和什么不是,但那不是不干净 – django

+0

我会爱做,如果我想要与巴别,我应该使用requirejs或其他模块装载?记住第三方模块的动态加载 – django