eggjs / egg

🥚 Born to build better enterprise frameworks and apps with Node.js & Koa
https://eggjs.org
MIT License
18.89k stars 1.81k forks source link

TS本地开发编译问题 #4094

Open rpig opened 4 years ago

rpig commented 4 years ago

两个问题很奇怪,在开发环境模式下用egg-bin启动服务,会有两种报错: 1、插件里的middleware提示import失败(非middleware没问题),把同级的ts文件删掉才会访问同名的js,暂时是这样解决的(官方不是说优先读js文件么,同名的情况下) 2、业务工程里会提示 can't overwrite property 'example' from /xxx/example.js by /xxxx/example.ts at /xxx/node_modules/egg-core/lib/loader/file_loader.js:78:47(目前解决方案是本地开发的时候先统一rm掉js文件,为啥会overwrite,egg-bin不是集成了tsnode么) (上面编译都是编译到同级目录,tsconfig都跟demo一致)

atian25 commented 4 years ago

2 个问题看起来都是因为同目录下有同名的 ts 和 js,既然用 tsnode 了,为啥你本地还要 tsc 导致有同名文件?

rpig commented 4 years ago

@atian25 第二个问题:同名是 npm i的时候自动执行了一次tsc,这个我可以去掉。正常是不能并存的是不。 第一个问题:插件我们都是开发好用npm包的方式引入的,这个时候同名的js和ts都会提交,这个怎么破,目前是把middleware的ts npmignore掉了(官方说会优先加载js文件,但是是ts文件报的import错误,因为node不支持直接import) (egg ts编译咱们都是建议编译到约定好的同级目录是么,统一输出到dist是不是识别不到)

rpig commented 4 years ago

求解

whxaxes commented 4 years ago

@zhu353071655 插件只提交 js 就行

whxaxes commented 4 years ago

https://github.com/whxaxes/egg-plugin-ts-demo ts 插件示例

rpig commented 4 years ago

@whxaxes 你也是用npmignore掉了,这个最好再官方文档上更新一下哈,我是run的时候才发现报错才想到的hack

whxaxes commented 4 years ago

这不是写 ts 模块的常见做法么 ...... 没人写 ts 模块会发 ts 文件的吧 ...

rpig commented 4 years ago

有哇 有些声明依赖的会上传ts文件

xiaotan0305 commented 4 years ago

我们也有这样的问题,发布插件的时候想同时发布ts和js(想使用ts文件作为声明文件使用),本地ts开发的时候引用插件,会因为插件同时含有ts和js而报错,后来没有办法就把ts文件单独抽出来另外发布一个types声明包,单独安装解决了,根本上还是需要官方来fileloader的时候兼用一下 image

image 如上图就是把源码ts单独发了一个types包来绕过报错问题,npm源码包里只能保留js文件,不保留声明文件(注: 我们不想手动维护index.d.ts文件,太麻烦) @atian25