将 esm 模块与 ts-node 一起使用
using esm modules with ts-node
我成功地 运行 ts-node
将 t运行 扩展到 CommonJS 模块。我用的官方:docs
我也想按照官方esm docs使用esm模块,可惜没成功。我不断收到的错误是:CustomError: Cannot find module '/module/next/to/index/ts/ModuleName' imported from /Users/mainuser/angular_apps/typescript_test/index.ts
这是tsconfig.json
{
"compilerOptions": {
"target": "ES2015",
"module": "ES2020",
"esModuleInterop": true,
"forceConsistentCasingInFileNames": true,
"strict": true,
"skipLibCheck": true
},
"ts-node": {
"esm": true
}
}
这是package.json的比赛:
{
"name": "typescript_test",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC",
"dependencies": {},
"devDependencies": {
"ts-node": "^10.7.0",
"typescript": "^4.6.3"
},
"type": "module"
}
I 运行 ts-node with: ./node_modules/.bin/ts-node index.ts
在项目根目录中。
我错过了什么?
这是我的 index.ts 代码:
import { SmokeTest } from "./SmokeTest";
SmokeTest.Log();
这是SmokeTest.ts文件的内容。两者都处于相同的fs级别:
export module SmokeTest{
export function Log(){
console.log("Smoke test running");
}
}
我是 运行ning node v14.19.1 和 ts-node v10.7.0
将 ts-node
添加到 tsconfig.json
证明对我无效。我稍微更新了 tsconfig
(see node14 base 作为起点):
{
"compilerOptions": {
"target": "ES2020",
"esModuleInterop": true,
"forceConsistentCasingInFileNames": true,
"strict": true,
"skipLibCheck": true,
"outDir": "build",
"module": "es2020",
"moduleResolution": "node"
},
"include": ["./*.ts"],
"exclude": ["node_modules"]
}
我使用了 --loader ts-node/esm
选项:
$ node --loader ts-node/esm ./index.ts
我还更新了我的 smoke-test.ts
模块,如下所示:
function Log() {
console.log('Smoke test running')
}
export const SmokeTest = { Log }
使用本机 esm 模块导入时,.ts
文件的扩展名必须始终提供为 .js
:
import { SmokeTest } from './smoke-test.js'
SmokeTest.Log()
我成功地 运行 ts-node
将 t运行 扩展到 CommonJS 模块。我用的官方:docs
我也想按照官方esm docs使用esm模块,可惜没成功。我不断收到的错误是:CustomError: Cannot find module '/module/next/to/index/ts/ModuleName' imported from /Users/mainuser/angular_apps/typescript_test/index.ts
这是tsconfig.json
{
"compilerOptions": {
"target": "ES2015",
"module": "ES2020",
"esModuleInterop": true,
"forceConsistentCasingInFileNames": true,
"strict": true,
"skipLibCheck": true
},
"ts-node": {
"esm": true
}
}
这是package.json的比赛:
{
"name": "typescript_test",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC",
"dependencies": {},
"devDependencies": {
"ts-node": "^10.7.0",
"typescript": "^4.6.3"
},
"type": "module"
}
I 运行 ts-node with: ./node_modules/.bin/ts-node index.ts
在项目根目录中。
我错过了什么?
这是我的 index.ts 代码:
import { SmokeTest } from "./SmokeTest";
SmokeTest.Log();
这是SmokeTest.ts文件的内容。两者都处于相同的fs级别:
export module SmokeTest{
export function Log(){
console.log("Smoke test running");
}
}
我是 运行ning node v14.19.1 和 ts-node v10.7.0
将 ts-node
添加到 tsconfig.json
证明对我无效。我稍微更新了 tsconfig
(see node14 base 作为起点):
{
"compilerOptions": {
"target": "ES2020",
"esModuleInterop": true,
"forceConsistentCasingInFileNames": true,
"strict": true,
"skipLibCheck": true,
"outDir": "build",
"module": "es2020",
"moduleResolution": "node"
},
"include": ["./*.ts"],
"exclude": ["node_modules"]
}
我使用了 --loader ts-node/esm
选项:
$ node --loader ts-node/esm ./index.ts
我还更新了我的 smoke-test.ts
模块,如下所示:
function Log() {
console.log('Smoke test running')
}
export const SmokeTest = { Log }
使用本机 esm 模块导入时,.ts
文件的扩展名必须始终提供为 .js
:
import { SmokeTest } from './smoke-test.js'
SmokeTest.Log()