我阅读了有关javascript中导入和导出声明的信息。然后,我尝试使用'import'关键字将类导入文件中。但是,尽管已经了解了node.js中模块的声明,但是在执行节点时还是会出错。
我的index.ts:
import Server from "./classes/server";
import router from './routes/router';
const server = new Server();
server.app.use('/', router);
server.start(() => {
console.log("server starting!");
})
我的课程/server.ts
import { SERVER_PORT } from './../global/enviroment';
import express from 'express';
class Server {
public app: express.Application;
public port: number;
constructor(){
this.app = express();
this.port = SERVER_PORT;
}
start(callback: any){
this.app.listen(this.port, callback);
}
}
export default Server;
我的package.json
但是当我尝试运行npm run start
...
答案 0 :(得分:0)
据我所知,您还不能在node js中使用import语句。但是您可以使用实验功能(.mjs文件)。
This article详细介绍了模块/文件的导入。
答案 1 :(得分:0)
如果要使用import/export
语法,则有以下选择:
esm
npm软件包将此添加到您的package.json:
{
"type": "module"
}
并将启动脚本更改为:"start": "node index.js"
(假设您正在使用节点> v13.3.0)。如果您使用的是节点v12或更高版本,则可以尝试:node --experimental-modules index.js
esm
软件包:此处的文档:https://github.com/standard-things/esm
不过,您需要先将.ts
文件编译为.js
文件。有关具体操作,请参见TypeScript docs。
答案 2 :(得分:0)
您的tsconfig.json怎么样?
我假设您缺少一些配置,该配置可将打字稿文件编译为节点可以运行的兼容javascript,这是tsconfig.json应该正常工作的示例
{
"compilerOptions": {
"module": "commonjs",
"moduleResolution": "node",
"preserveConstEnums": true,
"strict": true,
"target": "es2017",
}
因此,从本质上讲,您将需要具有moduleResolution
至node
https://www.typescriptlang.org/docs/handbook/module-resolution.html
也不要忘记节点未运行ts文件,您需要先编译然后再使用tsc。或者,如果您愿意,可以随时运行npx ts-node index.ts
编辑:
ts-node的作用是首先将代码从ts编译为js,然后使用生成的js运行它,您可以查看有关ts节点https://github.com/TypeStrong/ts-node的更多信息。
如果您想避免使用ts-node,则始终可以先使用npx tsc
进行编译,而node index.js
是来自Typescript的编译器,一旦有了javascript,就可以运行node .
或仅运行{{1} }。
请注意,您必须使用ts配置上的outDir
检查js文件的输出文件夹,如果缺少outDir
配置,则会在ts存在的相同位置添加js文件
https://www.typescriptlang.org/docs/handbook/compiler-options.html