请教下大神,在 config.default.js里可以设置服务器的静态文件的路径,如
config.static = {
prefix:'',
dir:path.join(appInfo.baseDir, 'app/public'),
dynamic:true,
preload:false,
maxAge:31536000,
buffer:false
};
但假如要设置多个路径都为静态文件的路径请问要怎么设置呢?
目前 egg-static 不支持多路径,@dead-horse 看看有没有必要
@zhengcanbiao 我之前是写了一个的 https://github.com/okoala/egg-multiple-static
现在就看组织要不要默认支持了~
@okoala 你可以去给 egg-static 提 PR 支持一下
真的有必要么?为何不放在一起?或者说不是不每个项目都有这样的需求。
有额外插件支持实现特定需求就好了,框架没必要所有场景都覆盖到
挺有必要,因为后台系统和前台系统的静态文件可以分开。
后台和前台为何放在一个应用里面? 不太好吧
我现在有个项目是react的webpack构建的,那么生成的文件全在dist目录里面,dist目录不想往public里面放。而是和源码src放一起,那么就想渲染这个app.html,public里面是放普通页面的静态文件。所以想设两个静态文件目录。当然nginx可以根据路径解决,这里支持的话在开发环境比较好。
@okoala 可以提个 PR 看看吧.
@huacnlee 感觉不是很大的需求,如果能直接内建支持感觉问题也不大。
egg-view支持多个路径渲染模板,那么静态文件应该也跟上比较好啊。
自己用koa搭起来挺顺手,用框架的话就要看支不支持了,要了解各种语法,各种写法。这也是纠结要不要选框架了,当然选框架肯定是挺多好处。
@lys623 这个问题只是 egg 有没有内置而已,通过上面 @okoala 写的插件,也能解决这个问题。
嗯,是的。
@atian25 好,我今天提的PR~
@okoala 谢谢大神
@zhengcanbiao
我已经提了个PR eggjs/egg-static#7,你可以关注下,用法和 egg-view 一致。
重新安装 egg 就可以了
// config/config.default.js
exports.static = {
dirs: ['dir1', 'dir2'],
};
@dead-horse 错误的写法,应该这样写
exports.static = {
dir: ['dir1', 'dir2'],
};
最近我也遇到类似的需求和问题,/app/public/ 是服务端的静态文件目录,而/build是 beidou build 后的 React 文件目录,在产品发布模式,这两个目录都需要直接的静态文件服务,而 static 似乎并不支持多个目录的设置,/build目录正常,但是/app/public目录的内容就无法正常显示,报 404 错误。
后来找到目前这个 dir: [ '/app/public/', '/build/' ] 的解决方案,勉强可以尝试成功,但感觉并不好,因为对应的是同一个 prefix,这样在 URL 上同样的路径,如:/public/main.js,对应到具体哪个目录呢?如果同时存在呢?哪个会生效?如:/app/public/main.js 和 /build/main.js。
前面的讨论有提到框架是否需要支持到这么细节的功能,我个人觉得是需要的,BeiDou 框架因为默认加载了 egg-static,所以 egg-static 就应该把这件事做彻底,否则使用者还要再去安装特殊的插件,还要考虑怎么禁用掉 egg-static,或者如何能不冲突并覆盖掉它的配置等。
理想的配置应该是类似这样的:
static: [
{
prefix: '/public/',
dir: '/app/public/'
},
{
prefix: '/ui/',
dir: '/build/'
},
]
希望大家讨论一下~
@okoala 瞅瞅
Which one? 哪一个库?那是个人主页的链接啊?
找到了,是说这个 egg-multiple-static 吗? 我前面也说了,应该在 egg-static 中彻底实现了,而不应该再用额外的插件来做,存在冲突的顾虑以及要不要安装了 egg-multiple-static 后删除 egg-static 呢?
还有一种可能就是 beidou 框架直接弃用 egg-static 改用 egg-multiple-static 也行。
另外,顺便提一句,egg-multiple-static 的文档太少,只提了一句可以用所有 Koa Static Cache 的配置,但初学者还是比较迷惑的,最好能有一些代码示例,会有很大的帮助!
@wind13
https://github.com/okoala/egg-multiple-static
我很早之前弄了这个,我更新下文档吧~
@okoala 兼容 egg-static 么?
https://github.com/eggjs/egg-static/blob/master/app/middleware/static.js#L45
可以考虑直接加下类似的配置,这里的实现是可以支持的。
如果可以支持,那就希望完善一下相关文档,给一个代码示例就更好了~
@okoala 把你这个直接集成到 egg-static 吧, config.static 支持数组方式感觉就可以了。
@atian25 看了一下那段代码,可能还需要再修改一下才能支持,也许思路应该更简单一些,类似:
module.exports = (options, app) => {
for (const opt of options) {
middlewares.push(staticCache(opt)); // 直接转交给 Koa Static Cache 完事儿~
}
}
当然,这个要仔细查看一下之前的代码逻辑,保留有效的部分,考虑很多细节问题,包括之前的兼容问题等,也许不是那么简单的一个任务。
PR 已提,相关进展关注 https://github.com/eggjs/egg-static/pull/17
其实一般应该都是丢 CDN 的,尽量不要在应用本身来托管静态资源。
真的有多个目录的需求的话,参考下:https://github.com/atian25/egg-showcase/pull/12
land 2.2.0
Most helpful comment
@dead-horse 错误的写法,应该这样写