打字稿-导入模块-找不到模块

时间:2019-08-21 03:29:54

标签: 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);

当我尝试将其导入到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)

3 个答案:

答案 0 :(得分:1)

快速解决方案:

使用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"
  }
}

关于TypeScript:

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

  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"
  }
}
  1. 或者您可以直接通过ts-node运行.ts文件。

答案 1 :(得分:0)

如果您使用的是打字稿,请尝试这样导入:

从“ ./Data”导入{Data};

let myData = new Data();

答案 2 :(得分:-1)

您需要像这样导出模型,

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

export default Data;

并且可以将其导入任何文件中,例如

import Data from "./Data";