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:
TypeScriptaslında JavaScript'in bir alt kümesi değil, bir üst kümesidir..tsdosyaları herhangi bir JavaScript ortamında (NodeJS, tarayıcı, ...) çalıştırılmadan önce JavaScript'e derlenmelidir.Normalde bir TypeScript projesinde,
package.jsoniçinde birbuildkomutumuz olur, bu komut.tsdosyalarınızı.jsdosyalarına derler, ardından derlenmişjsdosyası ile bir node sürecini başlatmak için birstartkomutu gelir:
{
"scripts": {
"build": "tsc index.ts",
"start": "node index.js",
"start:dev": "node -r ts-node/register index.ts"
}
}
- Veya
.tsdosyaları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();
