我有一个小型快递服务器,在bin/www.ts
我的 app.ts 文件中导入如下:
import app from '../app';
当我构建我的项目并将其转换为 JavaScript 时使用:tsc --project ./
然后运行它,nodemon ./build/bin/www
我在控制台中收到一个错误消息:
internal/process/esm_loader.js:74
internalBinding('errors').triggerUncaughtException(
^
Error [ERR_MODULE_NOT_FOUND]:
Cannot find module '/Users/t86b/Desktop/Dev/Projects/TestServerProject/Server/build/app'
imported from /Users/t86b/Desktop/Dev/Projects/TestServerProject/Server/build/bin/www.js
该文件存在于我指定的位置,我已经检查过并将其添加"type":"module"
到我的package.json
文件中。我也从 app.ts 文件中删除了所有需求,但仍然没有。我不知道此时该怎么办。这是我的package.json
文件(压缩到重点):
{
...
"scripts": {
"build": "tsc --project ./",
"start": "nodemon ./build/bin/www",
"start:dev": "nodemon -r ./bin/www.ts",
"tsc": "tsc",
"tsStart": "node ./build/bin/www"
},
...
"dependencies": {
...
"express": "^4.17.1",
"typescript": "^4.0.3"
},
"type": "module",
"devDependencies": {
...
"nodemon": "^2.0.7",
"ts-node": "^9.1.1"
}
}
我的ts.config
:
{
"compilerOptions": {
"target": "es2017",
"module": "ESNext",
"lib": ["ES2017"],
"outDir": "./build",
"rootDir": "./",
"strict": true,
"moduleResolution": "node",
"esModuleInterop": true,
/* Advanced Options */
"skipLibCheck": true,
"forceConsistentCasingInFileNames": true
}
}
如果有帮助,这里是我的 app.ts,它也没有错误(为了清楚起见进行了压缩):
import express from 'express';
import indexRouter from './routes/index';
...
let app = express();
app.use('/', indexRouter);
export default app;
如何让我的项目看到我的文件,以便我可以启动我的服务器?提前致谢,如果您需要更多详细信息,请告诉我。
@ASDFGerte 指出,在 esm 中,您必须包含相对导入的文件扩展名。所以,我能够通过改变来解决和运行我的代码:import app from '../app';
以import app from '../app.js';
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句