Ali*_*Ali 12 typescript turborepo
我有一个名为项目类型的自定义包,我在包之间共享我的类型
当我将简单的类导入到我的 Nestjs 项目中时,打字稿编译得很好,但是当涉及到运行时并执行 javascript 时,它会说:
server:dev: D:\Program\net-autism\packages\project-types\index.ts:1
server:dev: export * from "./authentication";
server:dev: ^^^^^^
server:dev:
server:dev: SyntaxError: Unexpected token 'export'
server:dev: at Object.compileFunction (node:vm:352:18)
server:dev: at wrapSafe (node:internal/modules/cjs/loader:1031:15)
server:dev: at Module._compile (node:internal/modules/cjs/loader:1065:27)
server:dev: at Object.Module._extensions..js (node:internal/modules/cjs/loader:1153:10)
server:dev: at Module.load (node:internal/modules/cjs/loader:981:32)
Run Code Online (Sandbox Code Playgroud)
包.json
{
"name": "project-types",
"version": "0.0.5",
"main": "./index.ts",
"types": "./index.ts",
"type": "module",
"license": "MIT",
"scripts": {
"lint": "eslint *.ts*"
},
"devDependencies": {
"eslint": "^7.32.0",
"eslint-config-custom": "*",
"tsconfig": "*",
"typescript": "^4.5.2"
},
"dependencies": {
"class-transformer": "^0.5.1",
"class-validator": "^0.13.2"
}
}
Run Code Online (Sandbox Code Playgroud)
用法:
import { Body, Controller, Post } from '@nestjs/common';
import { LoginDto } from 'project-types';
@Controller('auth')
export class AuthController {
constructor() {}
@Post('login')
async login(@Body() credentials: LoginDto) {}
@Post('register')
async register() {}
}
Run Code Online (Sandbox Code Playgroud)
Pat*_*yon 16
我也刚刚遇到这个问题。据我所知,当您构建消费应用程序时,它不会从类型包中转译 Typescript。
对于 NextJS 项目,有一个 npm 包可以解决这个问题https://www.npmjs.com/package/next-transpile-modules
但是,由于我有一个 NestJS 项目,您需要自己转译类型包。这是我的设置:
包/项目类型/package.json
{
...
// entry point is now the transpiled version of your code
"main": "./dist/index.js",
"types": "./dist/index.d.ts",
"type": "commonjs",
"scripts": {
"build": "tsc",
...
}
Run Code Online (Sandbox Code Playgroud)
包/项目类型/tsconfig.json
{
"include": ["."],
"exclude": ["dist", "build", "node_modules"],
"compilerOptions": {
"module": "commonjs",
"outDir": "./dist"
}
}
Run Code Online (Sandbox Code Playgroud)
应用程序/nest-project/tsconfig.json
{
...
"module": "commonjs",
...
}
Run Code Online (Sandbox Code Playgroud)
然后,您可以配置您的拓扑依赖关系turbo.json,以确保所有依赖包都预先构建。来自 Turbo 文档的示例:
"pipeline": {
"build": {
// "A package's `build` command depends on its dependencies'
// and devDependencies' `build` commands being completed first"
"dependsOn": ["^build"]
}
// ... omitted for brevity
}
Run Code Online (Sandbox Code Playgroud)
希望有帮助。
[更新]
示例仓库
更好的解决方案是做 @Patrick Kenyon 所做的事情,
并在你的 ts-config 中添加:
您的包 tsconfig.json :
"compilerOptions":{
...
"paths": {
"your_package_name": ["./src/index"]
}
Run Code Online (Sandbox Code Playgroud)
您的应用程序 tsconfig.json
"compilerOptions":{
...
"paths": {
"dto": ["../../../packages/your_package_name/src/index.ts"]
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4389 次 |
| 最近记录: |