当前位置: 首页 > 工具软件 > cltjs-node > 使用案例 >

使用ts-node去支持TS的Node运行环境

戚星腾
2023-12-01

1、需求

写Typescript文件,node命令可以直接编运行,我们不想ts转换为js,再去执行

2、实现

ts-node官方文档

使用ts-node来支持,实现TS的Node运行环境,官网文档比较全面,查了博客朋友的方法都不是很好能解决自己的问题,后来还是仔细读了官方的英文文档,才完成了配置

安装

官方文档:
官网给的,按着官网来就可以

# Locally in your project.
npm install -D typescript
npm install -D ts-node

# Or globally with TypeScript.
npm install -g typescript
npm install -g ts-node

# Depending on configuration, you may also need these
npm install -D tslib @types/node

创建TS配置文件

在项目根目录创建tsconfig.json文件,具体的配置请移步tsconfig配置,我的配置文件如下所示:

{
  "compilerOptions": {
    "target": "esnext",
    "module": "esnext",
    "useDefineForClassFields": true,
    "moduleResolution": "node",
    "strict": true,
    "jsx": "preserve",
    "sourceMap": true,
    "resolveJsonModule": true,
    "esModuleInterop": true,
    "lib": ["esnext", "dom"]
  },
  "include": [
    "src/**/*.ts",
    "src/**/*.d.ts",
    "src/**/*.tsx",
    "src/**/*.vue",
  ]
}

修改TS配置文件

把这段ts-node的配置添加到tsconfig.json的配置文件中

源码compilerOptions 里的moudle是esnext的,我们不希望他全局修改,我们只希望使用ts-node的部分将ts文件使用CommonJS的方式编译执行

"ts-node": {
    "compilerOptions": {
      "module": "CommonJS"
    }
}

修改package.json文件

官方文档说是让用node --loader ts-node/esm来执行
官方文档:https://github.com/TypeStrong/ts-node#commonjs-vs-native-ecmascript-modules

"scripts": {
	...
    "build:lib": "node --loader ts-node/esm ./mui-cli/src/commands/build.ts",
  },

没看官网之前若干问题

1、报错

(node:65039) Warning: To load an ES module, set "type": "module" in the package.json or use the .mjs extension.
(Use `node --trace-warnings ...` to show where the warning was created)
/Users/likai/Documents/WebProject/ts-node-utils/handle-themes-file/main.ts:1
import HandleThemes from "./lib/HandleThemes";
^^^^^^

SyntaxError: Cannot use import statement outside a module
    at wrapSafe (internal/modules/cjs/loader.js:979:16)
    at Module._compile (internal/modules/cjs/loader.js:1027:27)
    at Module.m._compile (/Users/likai/Documents/WebProject/ts-node-utils/node_modules/ts-node/src/index.ts:1311:23)
    at Module._extensions..js (internal/modules/cjs/loader.js:1092:10)
    at Object.require.extensions.<computed> [as .ts] (/Users/likai/Documents/WebProject/ts-node-utils/node_modules/ts-node/src/index.ts:1314:12)
    at Module.load (internal/modules/cjs/loader.js:928:32)
    at Function.Module._load (internal/modules/cjs/loader.js:769:14)
    at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12)
    at main (/Users/likai/Documents/WebProject/ts-node-utils/node_modules/ts-node/src/bin.ts:331:12)
    at Object.<anonymous> (/Users/likai/Documents/WebProject/ts-node-utils/node_modules/ts-node/src/bin.ts:482:3)

让在package.json中添加一个type类型为module的字段,这里不好用哈,看官网就知道了,为啥不好用了
其他参考

 类似资料: