首页 > 解决方案 > 打字稿 - 导入模块 - 找不到模块

问题描述

我在文件中有这个架构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);

当我尝试在我的 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)

任何想法为什么会这样。

我试过做:

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)

标签: node.jstypescript

解决方案


快速解决方案:

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

npm install --dev ts-node

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

node -r ts-node/register index.ts

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

{
  "dependencies": {
    "mongoose": "^5.6.10",
    "typescript": "^3.5.3"
  },
  "devDependencies": {
    "ts-node": "^8.3.0"
  }
}

关于打字稿:

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

  2. .ts在任何 JavaScript 环境(NodeJS、浏览器等)上运行之前,必须将文件编译成 JavaScript。

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

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

推荐阅读