CodeIgniter不内置Rollup支持,前端打包需独立进行;Rollup输入路径应设为项目根外层(如frontend/src/),输出必须指向public/js/并配置哈希命名,视图中通过version.json或glob动态引用,部署时须将Rollup构建置于清缓存、覆盖.env等步骤之前。

CodeIgniter 本身不内置 Rollup 支持,它只管 PHP 后端逻辑和路由;前端资源(JS/CSS)打包必须脱离框架独立进行。直接在 CI 项目里跑 rollup 命令不会自动注入到视图、不触发自动重编译、也不解决路径映射问题——你得自己接管构建流程。
Rollup 配置要避开 CI 的 public/ 路径陷阱
CI4 要求 Web 根目录是 public/,但 Rollup 默认输出到 dist/ 或 build/,如果配置成输出到 public/js/ 却没清空旧文件,缓存或版本号不更新,浏览器就一直加载旧 JS。更危险的是:若 Rollup 配置了 input: 'app.js' 但入口路径写成 ./src/app.js,而你把源码放在 public/src/ 下,等于把开发目录暴露在 Web 可访问路径里。
- Rollup 输入路径建议统一放在项目根外层,比如
frontend/src/,与app/、public/并列 - 输出路径必须设为
public/js/或public/dist/,且确保public/不被 Git 忽略(否则上线后找不到文件) - 在
rollup.config.js中显式设置output.assetFileNames和output.chunkFileNames,避免生成无哈希的静态名(如index.js),否则无法强制刷新缓存 - 别用
public/src/存源码——CI 的public/是 Web 入口,任何子目录都可能被直接请求,泄露源码
CI 视图里怎么安全引用 Rollup 输出的文件
Rollup 不生成 manifest.json,也没法像 Laravel Mix 那样自动注入版本号。硬写 <script src="/js/index.js"></script> 会导致用户长期缓存旧包。你得手动加时间戳或哈希,但不能靠 PHP filemtime() 实时读——生产环境常禁用该函数,且 CI 的缓存机制可能让结果不准。
PigX UI Pro 前端开发指南 - Vue 3 + TypeScript + Element Plus。当用户提到 PigX UI、PigX 前端、lgb-mgui 项目、Vue 3 企业级后台开发、Element Plus 后台开发时使用此技能。
- Rollup 构建后,用 shell 脚本生成一个
public/version.json,内容如{"js": "index.abc123.js"},再在 CI 视图中$this->load->view('layout', ['version' => json_decode(file_get_contents(FCPATH . 'version.json'), true)]); - 或者改用
output.entryFileNames: 'js/[name].[hash].js',然后在控制器里用glob(FCPATH . 'public/js/*.js')找最新文件(仅限单入口场景) - 绝对不要在视图里拼接
time()当版本号——CDN 会缓存这个 URL,导致每次请求都绕过 CDN
打包脚本必须和 CI 的部署流程串起来
只运行 rollup -c 不够。CI4 上线前要清 writable/、重置 .env、预装 vendor/,而 Rollup 属于前端构建阶段,必须在这些动作之前完成,否则 public/ 下没 JS,页面白屏。
立即学习“前端免费学习笔记(深入)”;
- 部署脚本顺序必须是:
npm ci && npm run build→ 清writable/内容 → 复制.env.production覆盖 →composer install --no-dev --optimize-autoloader - Rollup 的
package.jsonscripts 推荐写成:"build": "rollup -c && touch public/build-complete",后端部署脚本可检查public/build-complete是否存在来判断构建是否成功 - 如果用了 CI/CD(如 GitHub Actions),
public/目录必须设为 artifact,而不是整个项目 zip——否则app/或system/可能被意外上传到 Web 可访问路径
Rollup 和 CodeIgniter 是两套系统,没有“集成”这回事。关键不是怎么配 rollup.config.js,而是怎么让它的输出稳稳落在 public/ 里,且不破坏 CI4 对目录结构、权限、环境隔离的硬性要求。漏掉一次 public/js/ 清理,或忘了改 .env,前端 JS 就可能连不上后端 API,而错误还在控制台里静默消失。

















