在新的 Node js 项目中设置 es2022 时遇到问题

问题描述 投票:0回答:1

希望你知道发生了什么。

我正在使用 Seanpmaxwell 的 express 项目 ts 生成器 来生成一个新项目

(我使用的Node版本是v20.11.1)

它工作得很好,但我想在这方面使用 es2022 (只是想让顶级等待工作)

我在这上面花了 3 天,真是头疼

我运行yarn dev,这是输出

这是package.json:

{
  "name": "server",
  "version": "0.0.0",
  "type":"module",
  "scripts": {
    "build": "npx ts-node build.ts",
    "lint": "npx eslint --ext .ts src/",
    "lint:tests": "npx eslint --ext .ts spec/",
    "start": "node -r module-alias/register ./dist/src --env=production",
    "dev": "nodemon",
    "test": "nodemon --config ./spec/nodemon.json",
    "test:no-reloading": "npx ts-node --files -r tsconfig-paths/register ./spec"
  },
  "nodemonConfig": {
    "watch": [
      "src"
    ],
    "ext": "ts, html",
    "ignore": [
      "src/public"
    ],
    "exec": "./node_modules/.bin/ts-node --files -r tsconfig-paths/register ./src"
  },
  "_moduleAliases": {
    "@src": "dist"
  },
  "engines": {
    "node": ">=8.10.0"
  },
  "dependencies": {
    "@hocuspocus/server": "^2.11.3",
    "@types/express-ws": "^3.0.4",
    "bcrypt": "^5.1.1",
    "cookie-parser": "^1.4.6",
    "dotenv": "^16.4.5",
    "express": "^4.19.2",
    "express-async-errors": "^3.1.1",
    "express-ws": "^5.0.2",
    "helmet": "^7.1.0",
    "inserturlparams": "^1.0.1",
    "jet-logger": "^1.3.1",
    "jet-paths": "^1.0.6",
    "jet-validator": "^1.1.1",
    "jsonfile": "^6.1.0",
    "jsonwebtoken": "^9.0.2",
    "module-alias": "^2.2.3",
    "moment": "^2.30.1",
    "morgan": "^1.10.0",
    "mysql2": "^3.9.3",
    "ts-command-line-args": "^2.5.1",
    "y-protocols": "^1.0.6",
    "yjs": "^13.6.14"
  },
  "devDependencies": {
    "@types/bcrypt": "^5.0.2",
    "@types/cookie-parser": "^1.4.7",
    "@types/express": "^4.17.21",
    "@types/find": "^0.2.4",
    "@types/fs-extra": "^11.0.4",
    "@types/jasmine": "^5.1.4",
    "@types/jsonfile": "^6.1.4",
    "@types/jsonwebtoken": "^9.0.6",
    "@types/morgan": "^1.9.9",
    "@types/node": "^20.12.2",
    "@types/supertest": "^6.0.2",
    "@typescript-eslint/eslint-plugin": "^7.4.0",
    "@typescript-eslint/parser": "^7.4.0",
    "eslint": "^8.57.0",
    "eslint-plugin-node": "^11.1.0",
    "find": "^0.3.0",
    "fs-extra": "^11.2.0",
    "jasmine": "^5.1.0",
    "nodemon": "^3.1.0",
    "supertest": "^6.3.4",
    "ts-node": "^10.9.2",
    "tsconfig-paths": "^4.2.0",
    "typescript": "^5.4.3"
  }
}

这是 tsconfig.json

{
  "ts-node": {
    "esm": true,
 },
  "compilerOptions": {
    /* Visit https://aka.ms/tsconfig.json to read more about this file */
    /* Basic Options */
    // "incremental": true,                   /* Enable incremental compilation */
    "target": "es2022",                          /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019', 'ES2020', or 'ESNEXT'. */
    "module": "es2022",                     /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', 'es2020', or 'ESNext'. */
    // "lib": [],                             /* Specify library files to be included in the compilation. */
    // "allowJs": true,                       /* Allow javascript files to be compiled. */
    // "checkJs": true,                       /* Report errors in .js files. */
    // "jsx": "preserve",                     /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */
    // "declaration": true,                   /* Generates corresponding '.d.ts' file. */
    // "declarationMap": true,                /* Generates a sourcemap for each corresponding '.d.ts' file. */
    // "sourceMap": true,                     /* Generates corresponding '.map' file. */
    // "outFile": "./",                       /* Concatenate and emit output to single file. */
    "outDir": "dist",                        /* Redirect output structure to the directory. */
    // "rootDir": "./",                       /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */
    // "composite": true,                     /* Enable project compilation */
    // "tsBuildInfoFile": "./",               /* Specify file to store incremental compilation information */
    // "removeComments": true,                /* Do not emit comments to output. */
    // "noEmit": true,                        /* Do not emit outputs. */
    // "importHelpers": true,                 /* Import emit helpers from 'tslib'. */
    // "downlevelIteration": true,            /* Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5' or 'ES3'. */
    // "isolatedModules": true,               /* Transpile each file as a separate module (similar to 'ts.transpileModule'). */

    /* Strict Type-Checking Options */
    "strict": true,                           /* Enable all strict type-checking options. */
    // "noImplicitAny": true,                 /* Raise error on expressions and declarations with an implied 'any' type. */
    // "strictNullChecks": true,              /* Enable strict null checks. */
    // "strictFunctionTypes": true,           /* Enable strict checking of function types. */
    // "strictBindCallApply": true,           /* Enable strict 'bind', 'call', and 'apply' methods on functions. */
    // "strictPropertyInitialization": true,  /* Enable strict checking of property initialization in classes. */
    // "noImplicitThis": true,                /* Raise error on 'this' expressions with an implied 'any' type. */
    // "alwaysStrict": true,                  /* Parse in strict mode and emit "use strict" for each source file. */

    /* Additional Checks */
    // "noUnusedLocals": true,                /* Report errors on unused locals. */
    // "noUnusedParameters": true,            /* Report errors on unused parameters. */
    // "noImplicitReturns": true,             /* Report error when not all code paths in function return a value. */
    // "noFallthroughCasesInSwitch": true,    /* Report errors for fallthrough cases in switch statement. */

    /* Module Resolution Options */
    "moduleResolution": "node",            /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */
    "baseUrl": "./",                       /* Base directory to resolve non-absolute module names. */
    // "paths": {},                           /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */
    // "rootDirs": [],                        /* List of root folders whose combined content represents the structure of the project at runtime. */
    // "typeRoots": [],                       /* List of folders to include type definitions from. */
    // "types": [],                           /* Type declaration files to be included in compilation. */
    // "allowSyntheticDefaultImports": true,  /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */
    "esModuleInterop": true,                  /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */
    // "preserveSymlinks": true,              /* Do not resolve the real path of symlinks. */
    // "allowUmdGlobalAccess": true,          /* Allow accessing UMD globals from modules. */

    /* Source Map Options */
    // "sourceRoot": "",                      /* Specify the location where debugger should locate TypeScript files instead of source locations. */
    // "mapRoot": "",                         /* Specify the location where debugger should locate map files instead of generated locations. */
    // "inlineSourceMap": true,               /* Emit a single file with source maps instead of having a separate file. */
    // "inlineSources": true,                 /* Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set. */

    /* Experimental Options */
    // "experimentalDecorators": true,        /* Enables experimental support for ES7 decorators. */
    // "emitDecoratorMetadata": true,         /* Enables experimental support for emitting type metadata for decorators. */

    /* Advanced Options */
    "skipLibCheck": true,                     /* Skip type checking of declaration files. */
    "forceConsistentCasingInFileNames": true,  /* Disallow inconsistently-cased references to the same file. */
    "paths": {
      "@src/*": [
        "src/*",
        "db/*"
      ],
    },
    "useUnknownInCatchVariables": false
  },
  "include": [
    "src/**/*.ts",
    "db/*.ts",
    "spec/**/*.ts",
    "build.ts"
  ],
  "exclude": [
    "src/public/"
  ]
}

如果您有任何其他方法来使用 js 和最新的 es(或 es2022)启动一个 Express 项目,我愿意接受新想法,到目前为止,这是我发现的最完整的生成器,但我无法进一步取得进展。

谢谢

javascript typescript api express
1个回答
0
投票

最近 ts-node 对我来说也很不稳定,所以我总是最终使用 tsx,它的主要焦点是

.tsx
,但也非常适合
typescript
后端,仅使用
.ts

我在项目中建议使用它来运行打字稿并使用 Babel 创建构建实例。

因此,对于您的问题,您可以使用下面的此配置,它的类型为

common.js
,但
tsconfig
包含我所有的
.ts
文件,因此它理解它是带有
ES6
模块的
ES2022
。在
ES2022
上添加
target
既不必要也不推荐,因此您可以在构建后将其用作
ES2022
,并在创建项目时格式化
ES6
项目

package.json

{
  "name": "auth-api",
  "version": "1.0.0",
  "description": "Intermediate Auth API",
  "main": "index.js",
  "type": "commonjs",
  "scripts": {
    "start": "node dist/index.js",
    "build": "babel --extensions .ts ./src -d dist",
    "dev": "nodemon --watch ./**/*.ts --watch ./**/*.js --exec tsx ./src/index.ts"
  },

tsconfig.json

{
  "compilerOptions": {
    "target": "ES6",
    "module": "ES2022",
    "outDir": "./dist",
    "rootDir": "./src",
    "lib": ["ES6"],
    "strict": true,
    "moduleResolution": "Node",
    "esModuleInterop": true,
    "experimentalDecorators": true,
    "emitDecoratorMetadata": true
  },
  "include": ["./**/*.ts"],
  "exclude": ["node_modules"]
}

.babelrc

{
  "presets": [
    ["@babel/preset-env", { "targets": { "node": "current" } }],
    ["@babel/preset-typescript", { "allowDeclareFields": true }]
  ],
  "plugins": [
    ["@babel/plugin-proposal-decorators", { "legacy": true }],
    [
      "@babel/plugin-transform-flow-strip-types",
      { "allowDeclareFields": true }
    ],
    ["@babel/plugin-transform-class-properties", { "loose": true }]
  ]
}
© www.soinside.com 2019 - 2024. All rights reserved.