-
-
Notifications
You must be signed in to change notification settings - Fork 1.8k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Typescript + egg-mock cluster 報錯 #3930
Comments
这是 egg-mock/lib/start-cluster 文件,只要加入这句就能解决找不到
期待更好的解决方案,谢谢! |
cluster 里面是不可能去加 ts-node 的,我印象中 egg-bin 已经会判断然后注入 ts-node 的了。 cc @whxaxes |
我明白在生产环境是不用加载 ts-node ,因为生产环境是是用 tsc 生成好的 js。 但是如果我要跑 socketio 的测试,我必须使用 egg-mock 的 mm.cluster。这里是例子: 当我调用
cluster.js 会使用 start-cluster 的 script,fork 一个 process 出来,我估计就是 fork 出来的这个 process 没有支持 ts
谢谢 |
egg-bin 的 ts-node 应该会继承下去吧,可能没放 env 里面。 可以先: mm.cluster({
baseDir: '../../',
coverage: false,
opt: {
execArgv: [ '--require', require.resolve('ts-node/register') ]
}
}); 可以试下这样,cluster 是继承 coffee 的,我记得有个 opt 的参数的。 |
遇到相同的问题 加了opt就报了另外的错误: /Users/xudading/work/lazada/iris-proxy/node_modules/[email protected]@typescript/lib/typescript.js:122217
throw new Error("Could not find sourceFile: '" + fileName + "' in " + (program && JSON.stringify(program.getSourceFiles().map(function (f) { return f.fileName; }))) + ".");
^
Error: Could not find sourceFile: '/Users/xudading/.node-spawn-wrap-75420-68ff7c5550db/node' |
egg-bin test 没有问题 egg-bin cov 会有上面的问题 |
找到根本原因了 https://github.com/istanbuljs/spawn-wrap/blob/master/lib/mungers/node.js#L60 [ '/Users/xudading/work/lazada/iris-proxy/node_modules/node/bin/node',
'--require',
'/Users/xudading/work/lazada/iris-proxy/node_modules/[email protected]@ts-node/register/index.js',
'--require',
'/Users/xudading/work/lazada/iris-proxy/node_modules/[email protected]@source-map-support/register.js',
'/Users/xudading/.node-spawn-wrap-85177-a701b28fe038/node',
'/Users/xudading/work/lazada/iris-proxy/node_modules/[email protected]@egg-mock/lib/start-cluster',
'{"baseDir":"/Users/xudading/work/lazada/iris-proxy","cache":true,"coverage":true,"clean":true,"sticky":true,"framework":"/Users/xudading/work/lazada/iris-proxy/node_modules/egg","customEgg":"/Users/xudading/work/lazada/iris-proxy/node_modules/egg","plugins":{"egg-mock":{"enable":true,"path":"/Users/xudading/work/lazada/iris-proxy/node_modules/[email protected]@egg-mock"}},"port":17001,"workers":1}' ] 这个shim 应该放到node_modules下面就不会报错了 |
最终解决方案:
|
看起来是没权限写入 HOME,为啥? 可以提个 PR 给 mm.cluster 把这个 env 内置进去 |
@atian25 没权限写入HOME是那个人的情况,我这边是因为这个shim的路径在HOME,导致typescript报 |
land [email protected] |
看了下,
|
因为 cluster 是继承 Coffee 的,而 app 是为了单测速度在单进程里面做。 |
遇到个尴尬的问题,在 难道只能分开两个命令? |
这不是命令啊,你一个单测不是有个 case 么,一个用 mm.app,一个用 mm.cluster 啊 |
@atian25 是这个写test的需求 |
What happens?
使用 Typescript + egg-mock 的 mm.cluster 起动後,出现
nodejs.Error: Please set config.keys first
错误我知道
npm start
前需要npm tsc
,这样起动是没问题的。但 mm.cluster 跑测试就会出现问题。最小可复现仓库
复现步骤,错误日志以及相关配置
npm install
npm run 'test-cluster'
nodejs.Error: Please set config.keys first
错误使用 egg-mock cluster 的原因是 egg-socket.io 必须使用 cluster 模式才能成功测试
參考:
https://github.com/eggjs/egg-socket.io/blob/master/test/io.test.js
相关环境信息
謝謝
The text was updated successfully, but these errors were encountered: