node.js - Typescript - Modül İçe Aktarma - Modül Bulunamıyor


Bu şema data.ts dosyasında var

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

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

module.exports = mongoose.model('Data', DataSchema);

Bunu index.js dosyamda şu şekilde içe aktarmaya çalıştığımda:

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

Bu hatayı görmeye devam ediyorum:

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)

Bunun neden böyle olduğunu bilen var mı?

Denemeye çalıştım:

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

sonra import { data as Data } from './data' ile içe aktarılması

Ama bu aynı zamanda aşağıdaki hatayı da döndürüyor:

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)

Cevap #1

Hızlı çözüm:

TypeScript dosyalarınızı doğrudan çalıştırmak için ts-node kullanın

npm install --dev ts-node

Bu komutla bir node süreci başlatın:

node -r ts-node/register index.ts

Şunun gibi bir şey içermesi gerektiğinden emin olun: package.json

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

TypeScript Hakkında:

  1. TypeScript aslında JavaScript'in bir alt kümesi değil, bir üst kümesidir.

  2. .ts dosyaları herhangi bir JavaScript ortamında (NodeJS, tarayıcı, ...) çalıştırılmadan önce JavaScript'e derlenmelidir.

  3. Normalde bir TypeScript projesinde, package.json içinde bir build komutumuz olur, bu komut .ts dosyalarınızı .js dosyalarına derler, ardından derlenmiş js dosyası ile bir node sürecini başlatmak için bir start komutu gelir:

{
  "scripts": {
    "build": "tsc index.ts",
    "start": "node index.js",
    "start:dev": "node -r ts-node/register index.ts"
  }
}
  1. Veya .ts dosyalarını doğrudan ts-node ile çalıştırabilirsiniz.

Cevap #2

Eğer TypeScript kullanıyorsanız, şu şekilde içe aktarmayı deneyin:

import { Data} from "./Data";

let myData= new Data();

İlgili makaleler