liferay 7 - 不匹配的匿名定义()
Posted
技术标签:
【中文标题】liferay 7 - 不匹配的匿名定义()【英文标题】:liferay 7 - Mismatched anonymous define() 【发布时间】:2017-08-21 04:51:13 【问题描述】:我正在尝试将 sockjs (v1.1.2) 包含在我的 liferay 7 portlet 中,但我收到了以下警告:
Mismatched anonymous define() module: function ()...
然后库没有加载。
我直接将 .js 文件包含在我的 liferay-portlet.xml 中,如下所示:
<header-portlet-javascript>/common/js/sockjs.js</header-portlet-javascript>
我不知道如何让它工作
【问题讨论】:
【参考方案1】:您似乎遇到了LPS-68298 已解决的问题。如果您使用 Liferay 7.0 DXP SP2+ 或 Liferay 7.0 CE GA4+,您只需打开管理侧边栏并选择 控制面板 > 配置 > 系统设置 > Foundation > JavaScript 加载器 > 取消选中 Expose Global。如果您没有使用上述 Liferay 版本之一,则需要遵循this answer and disable the AMD loader before loading your script, then re-enable the AMD loader 的建议。或者,您可以通过手动编辑 JS 文件来解决此问题。更改 /common/js/sockjs.js
中的任何文本,例如:
typeof define == 'function'
收件人:
false && typeof define == 'function'
这将阻止 Liferay 的 AMD 加载程序加载文件。
【讨论】:
我通过禁用和重新启用 AMD 加载程序解决了问题。 使用 Liferay 7 CE GA4 上的控制面板提示解决。谢谢。 你无数次救了我的命,我老是忘记这个把戏!【参考方案2】:stiemannkj1 是对的。
但是如果你不想接触js库的代码(可能是CDN)也不想改变配置你可以做以下事情(如果你担心多个站点和portlet可能会影响这种行为)。
<script>
Liferay.Loader.define._amd = Liferay.Loader.define.amd;
Liferay.Loader.define.amd = false;
</script>
<script type="text/javascript" charset="utf8" src="https://cdn.datatables.net/1.10.19/js/jquery.dataTables.js"></script>
<script>
Liferay.Loader.define.amd = Liferay.Loader.define._amd;
</script>
如果此代码不起作用,请尝试此代码。
<script>
define._amd = define.amd;
define.amd = false;
</script>
<script type="text/javascript" charset="utf8" src="https://cdn.datatables.net/1.10.19/js/jquery.dataTables.js"></script>
<script>
define.amd = define._amd;
</script>
【讨论】:
以上是关于liferay 7 - 不匹配的匿名定义()的主要内容,如果未能解决你的问题,请参考以下文章
Liferay 7 - Freemarker:解包操作与函数签名不匹配