我正在尝试将EmberJS应用程序嵌入到一个大型门户应用程序中,该应用程序广泛使用RequireJS库。我正在使用ember-cli来构建项目。构建的应用程序包含两个文件dist/assets/vendor.js
和dist/assets/myapp.js
。 EmberJS应用程序在嵌入它之后工作,但门户应用程序的javascript中断。
经过一些研究后我发现问题是vendor.js
定义了自己的变量require
,requirejs
,requireModule
和define
全局命名空间中的网站变量。然后myapp.js
文件包含加载应用程序模块的define
语句。
有没有办法重命名这些或将它们放入一些不同的命名空间?
我想出的唯一解决方案是手动重命名两个.js
文件中的变量。这似乎有效,但它相当麻烦,如果它可以自动化它会很好。我也发现了使用RequireJS优化器,但我无法使用vendor.js
文件。
答案 0 :(得分:3)
我遇到了同样的问题,经过多次搜索,我相信我设法通过在项目中添加ember-derequire插件来解决问题:
ember install ember-derequire
这会将您应用中的所有'require'和'define'语句更改为'eriuqer'和'enifed'。你可以使用选项覆盖它映射到的内容(如果你不喜欢eriuqer和enifed,则需要注意使用相同长度的东西)。
如果没有帮助,我发现的另一个有希望的事情是loader.js有一个noConflict()函数,但我无法弄清楚在哪里放置loader.noConflict()调用,或者获取构建以使用备用名称生成代码,但如果第一个选项不适用于您的情况,它可能会帮助您。
答案 1 :(得分:0)
@@ Bjornicus(https://stackoverflow.com/a/39088322/5056421)写道,内置loader.js
的{{1}}函数似乎正常工作。我将其放在主要的JS文件(app.js)中:
noConflict()
和window.loader.noConflict({
define: "emberDefine"
});
未被覆盖(我将ember应用程序导入到另一个使用SystemJS的应用程序中)。但是我只做了很少的测试,所以我不知道这以后是否不会破坏某些东西。