Comments (52)
- app.js/agent.js 支持返回一个 promise
from egg.
+1 直接支持 app.js 是一个 generator 或者 async function 吧
from egg.
需求很强烈,app.js 里面可能要做挺多逻辑的
from egg.
增加 strict 参数,有些 warn 的直接抛错
from egg.
load filter能支持就好了,感觉可以单独抽象
from egg.
filter 原来就有吧
from egg.
之前是在 view 里面单独做的
from egg.
哦,懂了,我以为是 loader 参数。
helper 都应该放 view 里,先算了吧,view 有自己的 helper
from egg.
原来的加载顺序是 app > framework > plugin > egg,所以 loader 需要提供一个 eggPath 来指定 egg 的目录。
https://github.com/eggjs/egg-loader/blob/master/lib/base_loader.js#L187
from egg.
去除 eggPath 和 customEgg 参数,
- 顺序改为 app > framework > plugin,egg 作为 framework 的最底层,plugin 完全独立,无法覆盖 framework 和 app
- 继承 framework 必须指定 eggPath,所以不需要 customEgg 参数了。
from egg.
这个变更的出发点是?
from egg.
去除复杂性
from egg.
找 eggPaths 的时候是否需要强制指定当前框架的 eggPath
- 如果不强制指定,很容易忽略错误,某个框架未配置则忽略所有的文件。
- 如果强制指定,那会一直找到 koa,但是 koa 肯定不会配置的。
之前会指定 eggPath 参数为最底层的框架,但是这个变量容易被误解。
from egg.
找到 eggPath 就算到最底层了吧?egg 本身会依赖 koa,为何要 loader 去关注 koa 呢?
from egg.
看上面,去除 eggPath 了
from egg.
没搞明白如何能做到去掉 eggPath 的,去掉了多层继承是怎么做到的?
from egg.
这里说的 eggPath 是指 loader 的参数,指定最底层 egg 的路径。你说的 eggPath 是每层框架通过 symbol 来指定自己框架的路径。所以总是会存在理解差异,要去掉。一旦没有了最底层的 egg 路径,那么就不知道循环到哪里停止了,只能到 koa 了。
from egg.
这里 egg-loader 是不感知 egg 存在的,如果感知可以在 egg 加个 isEgg 的参数。
from egg.
一直找到 package.name === egg 的那个模块不就行了?
from egg.
而且对于 npm3,根本无法递归找下去。。。
from egg.
不是目录递归啊,是原型链
from egg.
egg 的 Application 设置一个 Application.isEgg = true
来判断是 egg 还是 koa?无法通过特殊值判断是否 koa Application 的。
from egg.
return app.hasOwnProperty('use') &&
app.hasOwnProperty('listen') &&
Object.getPrototypeOf(app) === Emitter.prototype;
黑科技
from egg.
会不会太黑了
from egg.
是黑
from egg.
补充去除 lib/core 潜规则的原因
现在框架必须放到 lib/core 目录下,这个约定其实很奇怪,我希望所有的 load unit 都是一致的,所以对于框架来说也是可以放到 app, config 目录下。
from egg.
增加 strict 模式,强制不能 override
from egg.
加载顺序建议还是保持不变: app > framework > plugin > egg
eggPath 可以通过 require.resolve('egg') 来找?
from egg.
Symbol.for('egg#eggPath') 建议改个名字,egg#frameworkPath
? 不然老搞混
from egg.
eggPath 就是框架 path 吧,我把所有都改下好了
GaoXiaochen [email protected]于2016年8月3日 周三上午9:37写道:
Symbol.for('egg#eggPath') 建议改个名字,frameworkPath ? 不然老搞混
—
You are receiving this because you were assigned.
Reply to this email directly, view it on GitHub
#19 (comment), or mute
the thread
https://github.com/notifications/unsubscribe-auth/AAWA1TYYpv_pdRtnSWsBGdQZZiH2xnyrks5qb_DfgaJpZM4JOMI-
.
from egg.
eggPath 我觉得就是 egg 的路径,上层的框架改成 egg#frameworkPath
这样没有歧义。
from egg.
现在就是去除这个概念,egg 本身来说也只是集合插件,增加默认配置,和框架无异。而插件功能应该独立,会依赖一些框架 api(使用哪些 api 由被哪些框架依赖决定),但不应该覆盖。
from egg.
我一下子想不到具体的场景,但是插件覆盖 egg 的场景肯定是有的。比如: egg 内置了一些功能,我开发了一个插件做了新的实现或者依赖某些功能的开启或关闭,是有可能对 egg 配置做调整的
from egg.
覆盖 egg 应该框架来做,插件只是使用 api
from egg.
指的是现在不允许插件覆盖 egg 或者框架定义的东西?
from egg.
覆盖 egg 应该框架来做,插件只是使用 api
这个步子迈的有点大,而且是否合理呢? 我认为能在插件里做掉的,就不要抛到 framework 里了
from egg.
我觉得是合理的,现在的 egg 更薄了,那在这之上的(比如内部使用版本)肯定是无法被插件覆盖的,所以尽量保持上面的原则。
from egg.
我理解 egg 是基线,plugin 是一堆扩展,framework 是最佳实践,app 是实际落地场景。
对于插件来说,最好的使用体验就是引入以后开启就好
from egg.
就是引入开启就好
- 提供 api
- 有必要使用框架和其他插件的 api,但不应该覆盖
from egg.
额,@popomore 你说的是最理想的情况,有些插件不光是提供 api,他可能依赖一些底层的能力(这些能力可能是需要通过配置来开启或者调整参数的)。
从逻辑上讲,插件是“插”在 egg 上的,现在加载顺序,egg 在 plugin 后面,plugin 往哪儿插呢?
from egg.
是的,但是这个本身不是 loader 文件做的,是在 app.js 自定义的,现在也是这样实现的。
from egg.
egg 的加载有两层切面,一个是现在说的顺序,另一层是各个模块(middleware, service, extend 等)。模块之间会有顺序,每个模块则是按上面的顺序加载。所以这里的顺序只是决定加载同名文件时的覆盖顺序,app.js 则是灵活的,所以叫 customApp。
from egg.
你的意思是:插件要覆盖 config,需要 app.js 里通过修改 app.config 来做?
还是说就不能覆盖?
from egg.
现在大部分也是这么做的
from egg.
app.config ? 这个。。。为什么要这样呢
from egg.
有业务场景才需要,不希望这样改。
比如在某个环境默认使用某些值,不希望被开发者覆盖,这时就需要修改 config
from egg.
loadHelperEextend 感觉可以移到 egg 里,依赖 app.Helper
from egg.
讨论的新结果是将 egg-loader 转成 egg-core,「一个带加载功能的 koa」。egg-core 保留 loader 功能,增加 constructor,初始化且加载。
这个 issue 等下更新下。
from egg.
app.messenger.on('log-reload', () => {
loggers.reload('got log-reload message');
loggers.coreLogger.info('[egg:logger] logger reload: got log-reload message from self');
});
这段逻辑放 logrotator?
from egg.
@popomore 方便,更加合适在 logrotator 插件,要不然还得约定 log-reload message
from egg.
from egg.
from egg.
Related Issues (20)
- GET 请求带 gzip body 会导致非法异常 HOT 4
- multipart多文件上传 HOT 1
- egg_amqplib 连接中断后导致程序异常退出 HOT 1
- 七牛云拉取文件始终返回404 HOT 10
- 使用ts时tsconfig.json文件配置module只能使用CommonJS,使用ES会报错 HOT 1
- 日志切割后不是 .log 后缀, vscode 不高亮啊
- 国际化用voerkai18n实现,在中间件处理切换语言时,yarn test测试环境不生效,请问会不会是eggjs影响的? HOT 1
- 如果使用AsyncLocalStorage,如何能够在不被Egg管理的类中,也能正确地拿到上下文对象 HOT 12
- 如何升级babel 7?
- jsx as tpl HOT 1
- new version available: 2.3.1 → 3.0.0, not compatible, you must update to use this. HOT 4
- egg-bin 5以上的版本设置端口无效
- 传闻Eggjs不再维护了,是真的吗? HOT 4
- new version available: 2.3.1 → 3.0.0, not compatible, you must update to use this. HOT 6
- 同一个方法在放在eggjs服务schedule 定时模块里面执行就可以获取的到inputElem,但是放到controller模块里面通过接口调用时获取不到呢,再express里面也可以成功调用,debug模式可能获取得到 HOT 3
- v3的文档多会更新,EggLogger 怎么用????? HOT 3
- 使用问题: 请问如何在egg应用下运行脚本,以及如何在脚本中使用app中的service,helper,db等能力 HOT 1
- egg-mysql能配置连接断开后自动重连吗
- eggjs 在容器通过前台启动,如何将stdout和stderr日志输出到日志文件 HOT 1
- curl返回值类型缩小 HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from egg.