为什么在不能在TypeScript项目执行.ts文件?
我想要封装一个类,并且使用ts-node执行:
src/index.ts
class Animal {
readonly age: number = 0
readonly name: string | undefined = undefined
constructor(age: number, name: string) {
this.age = age
this.name = name
}
}
export class Person extends Animal {
readonly height: number
constructor(age: number, name: string, height: number) {
super(age, name)
this.height = height
}
}
test/testPerson.ts
import { Person } from '../src/index';
const p = new Person(25, 'John', 177)
console.log(p)
export default {}
我运行ts-node 执行 测试文件报错:不识别.ts后缀的文件:
$ ts-node test/personTest.ts
TypeError: Unknown file extension ".ts" for /Users/user/Desktop/Test/Test-demos/nodejs-test-demos/nodejs-demo-04-npmpackage/test/personTest.ts
at Object.getFileProtocolModuleFormat [as file:] (node:internal/modules/esm/get_format:160:9)
at defaultGetFormat (node:internal/modules/esm/get_format:203:36)
at defaultLoad (node:internal/modules/esm/load:143:22)
at async ModuleLoader.load (node:internal/modules/esm/loader:403:7)
at async ModuleLoader.moduleProvider (node:internal/modules/esm/loader:285:45)
at async link (node:internal/modules/esm/module_job:78:21) {
code: 'ERR_UNKNOWN_FILE_EXTENSION'
}
我按照网上说的,找到package.json 删除:"type": "module",
但是又会报其他错误:
import { Person } from '../src/index';
^^^^^^
SyntaxError: Cannot use import statement outside a module
at internalCompileFunction (node:internal/vm:128:18)
at wrapSafe (node:internal/modules/cjs/loader:1280:20)
at Module._compile (node:internal/modules/cjs/loader:1332:27)
at Module.m._compile (/Users/user/Library/pnpm/global/5/.pnpm/ts-node@10.9.2_@types+node@20.12.13_typescript@5.4.5/node_modules/ts-node/src/index.ts:1618:23)
at Module._extensions..js (node:internal/modules/cjs/loader:1427:10)
at Object.require.extensions.<computed> [as .ts] (/Users/markleo/Library/pnpm/global/5/.pnpm/ts-node@10.9.2_@types+node@20.12.13_typescript@5.4.5/node_modules/ts-node/src/index.ts:1621:12)
at Module.load (node:internal/modules/cjs/loader:1206:32)
at Function.Module._load (node:internal/modules/cjs/loader:1022:12)
at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:135:12)
at phase4 (/Users/user/Library/pnpm/global/5/.pnpm/ts-node@10.9.2_@types+node@20.12.13_typescript@5.4.5/node_modules/ts-node/src/bin.ts:649:14)
请问:
1、package.json内"type": "module",
的作用是什么呢?
2、我想要到时候打包上传npmjs.org,这个配置"type": "module",
会不会有影响呢?
3、SyntaxError: Cannot use import statement outside a module
这个错误如何解决呢?
在 tsconfig.json 中添加:
{
"compilerOptions": {
"esModuleInterop": true,
}
}
运行:ts-node-esm script.ts
package.json
内 "type": "module",
的作用是什么?在 package.json
文件中设置 "type": "module",
会使得 Node.js 将该包中的所有 .js
文件作为 ECMAScript 模块(ESM)来处理,而不是 CommonJS 模块。这意味着你可以使用 import
和 export
语句来导入和导出模块,而不需要像 CommonJS 那样使用 require()
和 module.exports
。这对于 TypeScript 项目特别有用,因为 TypeScript 默认支持 ES 模块语法。
"type": "module",
会不会有影响?将 "type": "module",
添加到 package.json
中对你的包在 npmjs.org 上的兼容性有一定影响。它确保了其他开发者在使用你的包时,Node.js 会以 ES 模块的方式处理你的代码。这要求他们也必须了解如何正确处理 ES 模块。如果你的包主要是为支持 ES 模块的环境设计的,那么这通常不是问题。然而,如果你的包需要被更广泛的用户群体使用,包括那些可能还在使用 CommonJS 环境的用户,你可能需要提供一些兼容性措施,比如使用 Babel 之类的工具将你的 ES 模块代码转换为 CommonJS 格式,或者在你的包中同时提供两种格式的模块。
SyntaxError: Cannot use import statement outside a module
这个错误如何解决?这个错误通常发生在 Node.js 没有将文件识别为 ES 模块时,但你尝试使用了 import
或 export
语句。解决这个问题的方法取决于你的具体设置:
ts-node
并且想要使用 ES 模块:tsconfig.json
文件正确配置了 "module": "ESNext"
或 "module": "ES2020"
(或其他支持 ES 模块语法的选项),并且你的 Node.js 版本支持 ES 模块。此外,如果你的 package.json
中包含了 "type": "module",
,确保你的文件扩展名是 .mjs
(尽管对于 TypeScript 文件来说,这通常不是必需的,因为 ts-node
会处理 .ts
文件),或者确保你的 Node.js 环境正确配置为识别 .ts
文件为 ES 模块(这通常通过 ts-node
的配置来实现)。import
和 export
语句替换为 CommonJS 的 require()
和 module.exports
。但是,请注意,这可能会影响你在 TypeScript 项目中的类型安全和模块化功能。我创建了一个ts文件如下: 当我运行时候报错: 如果我用require就可以引入。 执行成功。 是否这个意思意味的是,ts-morph 这个库没有导出esm模块,只导出了cjs模块?
问题内容: 我正在从事一个相对较大的打字稿项目,正在用于运行节点测试和示例。据我了解,将文件编译为文件并执行。 最近,我听说了,这是一个打字稿运行时。我在typescript中尝试了一些示例,该示例可以使用。我使用来运行示例,控制台中印有许多编译消息,然后执行代码。后来我发现中有缓存文件。我觉得执行速度不会比 这似乎都和编译和使用高速缓存运行。它们之间有什么区别? 问题答案: Deno更像Node
会不会是react版本和antd版本不匹配的原因?有没有大佬懂的
RESTful API using Node.js, Express, Mongoose & TypeScript This is a boilerplate for building scalable and robust REST APIs using Node.js & TypeScript. Table of Contents Prerequisites Features Getting
本文向大家介绍浅谈TypeScript 用 Webpack/ts-node 运行的配置记录,包括了浅谈TypeScript 用 Webpack/ts-node 运行的配置记录的使用技巧和注意事项,需要的朋友参考一下 公司项目代码是用 TypeScript 写的, 中间遇到有些代码不要放到 Node 里面去跑. 具体场景一些路由配置, 比较大的一块 JSON 数据定义在 TypeScript 里.
某些情况下,我并不需要 ts 为我的功能函数进行类型检查,我只需要它帮我提醒使用者 功能函数 有哪些调用方式;因此我不想使用 a.ts 将其混入到一个文件。 如何做?请以此为例 希望的使用方式: 仅引入一个文件就能进行使用,并且能够接受 ts 的类型束缚。 如同 echarts 插件一样,将 js-功能实现 和 ts-使用限制 分开。 环境:vue3 , vite