ember.js 嵌入的ember-cli项目与RequireJS冲突

s3fp2yjn  于 2022-11-05  发布在  其他
关注(0)|答案(2)|浏览(169)

我尝试将EmberJS应用程序嵌入到一个大型门户应用程序中,该应用程序广泛使用RequireJS库。我使用ember-cli构建项目。构建的应用程序由两个文件组成,dist/assets/vendor.jsdist/assets/myapp.js。嵌入后EmberJS应用程序可以正常工作,但门户应用程序的javascript会中断。
经过研究,我发现问题是vendor.js定义了自己的变量requirerequirejsrequireModuledefine,这些变量与网站全局名称空间中的变量冲突。myapp.js文件包含了define语句,这些语句加载了应用的模块。
是否有办法重命名这些文件或将它们放到其他名称空间中?
我想到的唯一解决方案是手动重命名两个.js文件中的变量。这看起来可行,但相当麻烦,如果能自动化就更好了。我也发现了使用RequireJS优化器的方法,但我无法让它与vendor.js文件一起工作。
你能帮我吗?谢谢!

zaqlnxep

zaqlnxep1#

我遇到了同样的问题,经过大量的搜索,我相信我通过在我的项目中添加ember-derequire插件来解决它:

ember install ember-derequire

这会将应用中所有的“require”和“define”语句更改为“eriuqer”和“enifed”。如果你不喜欢eriuqer和enifed,你可以使用选项覆盖它Map的内容(注意你必须使用相同长度的内容)。
如果这没有帮助,我发现的另一个有希望的事情是loader.js有一个noConflict()函数,但是我不知道在哪里放置loader.noConflict()调用,或者让构建使用备用名称生成代码,但是如果第一个选项不适合您的情况,它可能会帮助您。

w1e3prcc

w1e3prcc2#

正如@Bjornicushttps://stackoverflow.com/a/39088322/5056421)所写的那样,内置的loader.jsnoConflict()函数看起来工作正常,我把它放在了主JS文件(app.js)中:

window.loader.noConflict({
  define: "emberDefine"
});

并且define没有被覆盖(我将ember应用导入到另一个使用SystemJS的应用中)。但是我只做了几个测试,所以我不知道这是否会在以后破坏一些东西。

相关问题