我有一个名为项目类型的自定义包,在该包中,我在包之间共享类型。
当我将这个简单的类导入到我的nestjs项目中时,typescript可以很好地编译它,但是当涉及到运行时和执行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)package.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"
}
}用法:
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() {}
}发布于 2022-08-26 16:49:08
我也遇到了这个问题。据我所知,当您构建您的消费应用程序时,它不是从您的类型包的类型记录。
对于NextJS项目,有一个npm包来解决这个问题,https://www.npmjs.com/package/next-transpile-modules
但是,由于我有一个NestJS项目,您需要自己转换类型包。这是我的设计:
packages/project-types/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",
...
}packages/project-types/tsconfig.json
{
"include": ["."],
"exclude": ["dist", "build", "node_modules"],
"compilerOptions": {
"module": "commonjs",
"outDir": "./dist"
}
}apps/nest-project/tsconfig.json
{
...
"module": "commonjs",
...
}然后,您可以配置您的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
}希望这能有所帮助。
更新
示例存储库
https://stackoverflow.com/questions/73189881
复制相似问题