Typescript - 导入模块 - 找不到模块

use*_*od2 9 node.js typescript

我的文件中有这个架构data.ts

import mongoose from "mongoose";
const Schema = mongoose.Schema;

const DataSchema = new Schema(
    {
        id: Number,
        message: String,
    },
    { timestamps: true }
);

module.exports = mongoose.model('Data', DataSchema);
Run Code Online (Sandbox Code Playgroud)

当我尝试将其导入到我的 index.js 中时:

const Data = require('./data');

我不断看到这个错误:

internal/modules/cjs/loader.js:584
    throw err;
    ^

Error: Cannot find module './data'
    at Function.Module._resolveFilename (internal/modules/cjs/loader.js:582:15)
    at Function.Module._load (internal/modules/cjs/loader.js:508:25)
    at Module.require (internal/modules/cjs/loader.js:637:17)
Run Code Online (Sandbox Code Playgroud)

任何想法为什么会这样。

我尝试过这样做:

export const data = mongoose.model('Data', DataSchema);

然后导入import { data as Data } from './data'

但这也会返回以下错误:

import { data as Data } from './data'
       ^

SyntaxError: Unexpected token {
    at new Script (vm.js:80:7)
    at createScript (vm.js:274:10)
    at Object.runInThisContext (vm.js:326:10)
    at Module._compile (internal/modules/cjs/loader.js:664:28)
Run Code Online (Sandbox Code Playgroud)

小智 4

快速解决方案:

用于ts-node直接运行 TypeScript 文件

npm install --dev ts-node
Run Code Online (Sandbox Code Playgroud)

使用以下命令启动节点进程:

node -r ts-node/register index.ts
Run Code Online (Sandbox Code Playgroud)

确保您package.json应该包含类似以下内容:

{
  "dependencies": {
    "mongoose": "^5.6.10",
    "typescript": "^3.5.3"
  },
  "devDependencies": {
    "ts-node": "^8.3.0"
  }
}
Run Code Online (Sandbox Code Playgroud)

关于打字稿:

  1. TypeScript实际上是 JavaScript 的超集(而不是子集)。 打字稿

  2. .ts文件必须先编译为 JavaScript,然后才能在任何 JavaScript 环境(NodeJS、浏览器等)上运行。

  3. 通常在 TypeScript 项目中,我们会build在 中 有一个命令package.json,它将您的.ts文件编译成.js文件,后面跟着一个start命令来启动带有编译js文件的节点进程:

{
  "scripts": {
    "build": "tsc index.ts",
    "start": "node index.js",
    "start:dev": "node -r ts-node/register index.ts"
  }
}
Run Code Online (Sandbox Code Playgroud)
  1. 或者您可以直接使用ts-node.ts运行文件。