Joh*_*Lee 8 javascript node.js next.js
custom-server-typescript尝试使用 example和 package安装 nextjs "type": "module"。
当我运行时ts-node --project tsconfig.server.json server/index.ts,出现以下错误
TypeError [ERR_UNKNOWN_FILE_EXTENSION]: Unknown file extension ".ts" for D:\projects\trpgline-room3\server\index.ts
Run Code Online (Sandbox Code Playgroud)
这是我的设置
ts-node: 10.4.0
node: v16.13.1
npm: 8.3.0
nextjs: 12.0.7
这是我的tsconfig.server.json设置
{
"extends": "./tsconfig.json",
"include": ["server/**/*.ts"]
}
Run Code Online (Sandbox Code Playgroud)
这是我的tsconfig.json内容
{
"compilerOptions": {
"target": "es5",
"lib": ["dom", "dom.iterable", "esnext"],
"allowJs": true,
"skipLibCheck": true,
"strict": true,
"forceConsistentCasingInFileNames": true,
"noEmit": true,
"esModuleInterop": true,
"module": "ES2020",
"moduleResolution": "node",
"resolveJsonModule": true,
"isolatedModules": true,
"jsx": "preserve",
"incremental": true
},
"include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"],
"exclude": ["node_modules","dist", ".next", "out", "next.config.js"]
}
Run Code Online (Sandbox Code Playgroud)
我不明白为什么ts-node无法识别本地的 ts 文件?10.0.0 不应该已经支持了吗?
我在网上做了一些研究,发现了另一个命令node --loader ts-node/esm server/index.ts,它这次加载了 ts 文件,但后来它显示了 nextjs 错误
Error [ERR_REQUIRE_ESM]: Must use import to load ES Module: D:\projects\trpgline-room3\.next\server\pages\_document.js
require() of ES modules is not supported.
require() of D:\projects\trpgline-room3\.next\server\pages\_document.js from D:\projects\trpgline-room3\node_modules\next\dist\server\require.js is an ES module file as it is a .js file whose nearest parent package.json contains
"type": "module" which defines all .js files in that package scope as ES modules.
Instead change the requiring code to use import(), or remove "type": "module" from D:\projects\trpgline-room3\package.json.
at createErrRequireEsm (D:\projects\trpgline-room3\node_modules\ts-node\dist-raw\node-cjs-loader-utils.js:97:15)
at assertScriptCanLoadAsCJSImpl (D:\projects\trpgline-room3\node_modules\ts-node\dist-raw\node-cjs-loader-utils.js:30:11)
at Object.require.extensions.<computed> [as .js] (D:\projects\trpgline-room3\node_modules\ts-node\src\index.ts:1363:5)
at Module.load (node:internal/modules/cjs/loader:981:32)
at Function.Module._load (node:internal/modules/cjs/loader:822:12)
at Module.require (node:internal/modules/cjs/loader:1005:19)
at require (node:internal/modules/cjs/helpers:102:18)
at Object.requirePage (D:\projects\trpgline-room3\node_modules\next\server\require.ts:71:10)
at Object.loadComponents (D:\projects\trpgline-room3\node_modules\next\server\load-components.ts:6:40)
at DevServer.findPageComponents (D:\projects\trpgline-room3\node_modules\next\server\next-server.ts:66:51) {
code: 'ERR_REQUIRE_ESM'
Run Code Online (Sandbox Code Playgroud)
从nextjs 12开始,nextjs默认支持ESM,但仍然使用require而不是import.
有什么解决办法吗?
| 归档时间: |
|
| 查看次数: |
1189 次 |
| 最近记录: |