You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Liferay 7.0 CE React Portlet构建时出现module未定义引用错误求助

解决Liferay 7.0 CE React Portlet构建的两个问题

嘿,我来帮你搞定这个构建时遇到的问题!你遇到的两个问题其实都是旧版模板依赖和配置适配的问题,咱们一步步来解决:

1. 处理babel-preset-es2015废弃警告

这个警告是因为babel-preset-es2015已经被官方废弃了,现在推荐用babel-preset-env,它能根据你指定的目标环境自动决定需要转译的ES语法,比旧的预设更灵活高效。你可以按以下步骤替换:

  • 先卸载旧的预设包:
    npm uninstall babel-preset-es2015
    
  • 安装最新的babel-preset-env开发依赖:
    npm install babel-preset-env --save-dev
    
  • 找到项目里的Babel配置文件(一般是.babelrc或者babel.config.js),把presets数组里的es2015替换成env,修改后大概是这样:
    {
      "presets": [
        "env",
        "react"
      ]
    }
    

2. 解决reference error: module is not defined错误

这个错误本质是浏览器环境不支持Node.js的module语法,要么是打包配置没把模块转成浏览器能识别的格式,要么是Portlet的资源引用有问题。试试这几个方案:

方案一:调整Webpack配置

打开项目的webpack.config.js,检查并修改以下配置:

  • 确保target设置为web(让Webpack针对浏览器环境打包):
    module.exports = {
      target: 'web',
      // 其他现有配置...
    };
    
  • 把output.libraryTarget改成umd,这样打包后的文件能兼容CommonJS、AMD和全局变量三种模块方式:
    output: {
      filename: '[name].js',
      libraryTarget: 'umd',
      library: 'YourPortletName'
    }
    

方案二:优化Babel模块转译配置

在Babel配置里,给env预设加上modules: false的参数,让Webpack来处理模块打包(而不是让Babel把ES模块转成CommonJS,避免浏览器识别不了):

{
  "presets": [
    ["env", { "modules": false }],
    "react"
  ]
}

方案三:检查Portlet的资源引用配置

打开portlet.xml或者liferay-portlet.xml,确认你打包后的JS文件被正确引用了。比如在portlet.xml里添加这样的初始化参数:

<init-param>
  <name>com.liferay.portlet.header-portlet-javascript</name>
  <value>/js/[你的打包文件名].js</value>
</init-param>

完成以上调整后,重新执行./gradlew build --stacktrace,应该就能顺利构建了!

内容的提问来源于stack exchange,提问作者Jani Oksanen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:38:49