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

Rails7项目中esbuild目录结构打包及JS目录导入问题

问题

我给原本用sprockets处理资源的Rails7项目配置了基于esbuild的jsbundling-rails,目前可直接引用JS文件完成加载。因文件数量较多,希望按逻辑拆分JS目录结构,但尝试直接导入整个base目录时,esbuild提示无法解析路径,想了解该需求是否可行,还是只能在application.js中手动逐个导入文件。

目录结构示例

app
- assets
-- javascript
--- some.js
--- some_more.js
---- base
----- some_other.js
----- some_way_other.js

可行的导入方式

import "./some"
import "./some_more"
import "./base/some_other"
import "./base/some_way_other"

期望的导入方式

import "./some"
import "./some_more"
import "./base"

报错信息

15:39:22 js.1   | [watch] build started (change: "app/javascript/application.js")
15:39:22 js.1   | ✘ [ERROR] Could not resolve "./base"
15:39:22 js.1   |
15:39:22 js.1   |     app/javascript/application.js:14:7:
15:39:22 js.1   |       14 │ import "./base"
15:39:22 js.1   |          ╵        ~~~~~~~~
15:39:22 js.1   |
15:39:22 js.1   | 1 error
15:39:22 js.1   | [watch] build finished

Procfile.dev配置

web: unset PORT && /root/.rbenv/shims/thin start -C config/thin_development.yml
js: yarn build --watch

解决方案

该需求完全可行,无需手动逐个导入,有两种常用实现方式:

1. 目录内创建index.js(推荐,符合ES模块规范)

在base目录下新建index.js文件,在其中导入该目录下的所有JS文件:

// app/javascript/base/index.js
import "./some_other"
import "./some_way_other"

之后在application.js中直接导入./base即可,esbuild会自动将目录下的index.js作为默认入口文件解析。

2. 使用esbuild的glob批量导入(需版本支持)

esbuild支持通过import.meta.glob实现批量导入,无需额外配置文件,直接在application.js中写入:

import.meta.glob("./base/*.js").forEach(module => module())

注意:此特性需要esbuild 0.13.0及以上版本支持,导入的模块会被自动执行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 00:13:27