এনইএসটিজেএসে টাইপআরএম সত্তা - কোনও মডিউলের বাইরে আমদানি বিবৃতি ব্যবহার করতে পারে না


11

'নেস্ট নিউ' কমান্ড দিয়ে নতুন প্রকল্প শুরু করেছেন। আমি এতে সত্তা ফাইল যুক্ত না করা পর্যন্ত কাজ করে।

নিম্নলিখিত ত্রুটি পেয়েছে:

'টাইপরম' থেকে আমদানি করুন {সত্তা, কলাম, প্রাথমিক জেনারেটেড কলাম;

^^^^^^

সিনট্যাক্স এরির: একটি মডিউলের বাইরে আমদানি বিবৃতি ব্যবহার করতে পারে না

আমি কী মিস করি?

মডিউলটিতে সত্তা যুক্ত করা:

import { Module } from '@nestjs/common';
import { BooksController } from './books.controller';
import { BooksService } from './books.service';
import { BookEntity } from './book.entity';
import { TypeOrmModule } from '@nestjs/typeorm';

@Module({
  imports: [TypeOrmModule.forFeature([BookEntity])],
  controllers: [BooksController],
  providers: [BooksService],
})
export class BooksModule {}

app.module.ts:

import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { TypeOrmModule } from '@nestjs/typeorm';
import { Connection } from 'typeorm';
import { BooksModule } from './books/books.module';

@Module({
  imports: [TypeOrmModule.forRoot()],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}

'@ নেস্টজেএস / সাধারণ' থেকে import মডিউল import আমদানি করুন;
প্রেস্টন

@ প্রিস্টন আপনার বোঝাতে কী বোঝাতে চাইছেন? আপনার কি সাধারণত ভাগ করা ফাইলগুলির জন্য একটি মডিউল তৈরি করতে হবে?
জোশুয়া ডি লিওন

আপনি কি নিজের লাইনটার থেকে বা কোনও সংকলন থেকে ত্রুটিটি পাচ্ছেন? আপনার এই নতুন ফাইলটি কোথায় আছে? এটা কি আপনার srcডিরেক্টরিতে আছে? আপনি TypeORM ব্যবহার করেন, তাহলে আপনি আপনার দেখাতে পারেন TypeOrmModuleমধ্যে আমদানি AppModuleএর importsঅ্যারে? আমরা দেখতে পাই না এমন কনফিগারেশনটিতে কিছু ভুল থাকতে পারে
জে ম্যাকডনিয়েল

সত্তা আমদানির তথ্য সহ আপডেট হওয়া পোস্ট
অ্যান্টন

উত্তর:


19

আমার ধারনাটি হ'ল আপনার কাছে এমন TypeormModuleকোনও entitiesপ্রোপার্টি সহ একটি কনফিগারেশন রয়েছে যা দেখতে দেখতে:

entities: ['src/**/*.entity.{ts,js}']

বা পছন্দ

entities: ['../**/*.entity.{ts,js}']

আপনি যে ত্রুটিটি পাচ্ছেন তা হ'ল কারণ আপনি tsএকটি jsপ্রসঙ্গে একটি ফাইল আমদানির চেষ্টা করছেন । আপনি যতক্ষণ ওয়েবপ্যাক ব্যবহার করছেন না ততক্ষণ আপনি এটির পরিবর্তে এটি ব্যবহার করতে পারেন যাতে আপনি সঠিক ফাইলগুলি পান

entities: [join(__dirname, '**', '*.entity.{ts,js}`)]

যেখানে মডিউলটি joinআমদানি করা হয় path। এখন __dirnameথেকে সমাধান হবে srcবা distএবং তারপর প্রত্যাশিত এটি tsবা jsযথাক্রমে ফাইল। এখনও কোন সমস্যা চলতে থাকলে আমাকে জানান।

সম্পাদনা 1/10/2020

উপরের ধরণের কনফিগারেশনটি জাভাস্ক্রিপ্টের সামঞ্জস্যপূর্ণ ফাইল ( .jsবা TypeormModule.forRoot()পাস হওয়া প্যারামিটারগুলিতে) হয় umes আপনি যদি এর ormconfig.jsonপরিবর্তে ব্যবহার করছেন তবে আপনার ব্যবহার করা উচিত

entities: ['dist/**/*.entity.js']

যাতে আপনি সংকলিত জেএস ফাইলগুলি ব্যবহার করছেন এবং আপনার কোডে টিএস ফাইল ব্যবহার করার সুযোগ নেই।


1
তবে এটি মোট জগাখিচুড়ি। মাইগ্রেশনগুলির জন্য টাইপ
স্ক্রিপ্ট

denoএকমাত্র নেটিভ টাইপস্ক্রিপ্ট কোড রানার। TypeORMএটি টাইপস্ক্রিপ্ট ব্যবহার করার সময়, Nodeজাভাস্ক্রিপ্ট রানটাইমের সাথে এখনও কাজ করে । tsফাইলগুলি গ্রহণ এবং হুডের নিচে জাভাস্ক্রিপ্টে সংকলন করার জন্য উন্নতি করা যেতে পারে , তারপরে এগুলি মুছুন যাতে শেষ ব্যবহারকারী তাদের দেখতে না পান, তবে এটি টাইপঅরএম গিট সংগ্রহস্থলটিতে একটি সমস্যা হিসাবে উপস্থিত করা দরকার
জে ম্যাকডনিয়েল

4

জে ম্যাকডনিয়েল তার উত্তরে যেমন ব্যাখ্যা করেছেন, সমস্যাটি ormconfig.jsonফাইলটিতে সত্তা ফাইলগুলির প্যাটার্ন মেলানো বলে মনে হচ্ছে : সম্ভবত কোনও জাভাস্ক্রিপ্ট ফাইল থেকে টাইপসক্রিপ্ট ফাইল (মডিউল) আমদানি করা হয়েছে (সম্ভবত একটি পূর্বে স্থানান্তরিত টাইপস্ক্রিপ্ট ফাইল)।

এটি একটি বিদ্যমান অপসারণ করার জন্য যথেষ্ট হতে হবে tsormconfig.jsonএটিতে গ্লোব প্যাটার্নটি , যাতে টাইপআরএম কেবল জাভাস্ক্রিপ্ট ফাইল লোড করবে। সত্তা ফাইলগুলিতে পাথটি সেই কার্য সম্পাদনের ডিরেক্টরি সম্পর্কিত যেখানে নোড কার্যকর করা হয় uted

   "entities"   : [
      "dist/entity/**/*.js"
   ],
   "migrations" : [
      "dist/migration/**/*.js"
   ],
   "subscribers": [
      "dist/subscriber/**/*.js"
   ],

srcসম্ভবত পরিবর্তন করা উচিত distযে হিসাবে যেখানে runnable কোড জাভাস্ক্রিপ্ট transpiled হওয়ার পর হয়।
জে ম্যাকডনিয়েল

ধন্যবাদ, আমি পথগুলি আপডেট করেছি।
iY1NQ

2

টাইপঅরএম ডকুমেন্টেশনে, আমি টাইপস্ক্রিপ্টের জন্য একটি নির্দিষ্ট বিভাগ খুঁজে পেয়েছি

এই বিভাগে বলা হয়েছে:

Ts-node বিশ্বব্যাপী ইনস্টল করুন:

npm install -g ts-node

প্যাকেজ.জসনে স্ক্রিপ্ট বিভাগের অধীনে টাইপর্ম কমান্ড যুক্ত করুন

"scripts" {
    ...
    "typeorm": "ts-node -r tsconfig-paths/register ./node_modules/typeorm/cli.js"    
}

তাহলে আপনি কমান্ডটি এভাবে চালাতে পারেন:

npm run typeorm migration:run

আপনার যদি এনপিএম স্ক্রিপ্টে ড্যাশ দিয়ে প্যারামিটারটি পাস করতে হয় তবে আপনাকে সেগুলি পরে যুক্ত করতে হবে -। উদাহরণস্বরূপ, আপনার যদি জেনারেট করতে হয় তবে কমান্ডটি এটির মতো:

npm run typeorm migration:generate -- -n migrationNameHere

এটি আমার ফাইল কনফিগারেশনের সাথে কাজ করে:

{
    "type": "postgres",
    "host": "yourhost",
    "port": 5423,
    "username": "username",
    "password": "password",
    "database": "your_db",
    "synchronize": true,
    "entities": [
        "src/modules/**/*.entity.{ts,js}"
    ],
    "migrations": [
        "src/migrations/**/*.{ts,js}"
    ],
    "cli": {
        "entitiesDir": "src/modules",
        "migrationsDir": "src/migrations"
    }
}

তারপরে আপনি জেনারেট কমান্ডটি চালাতে পারেন।


এটি গ্রহণযোগ্য উত্তর হওয়া উচিত
নিকো লি

1

আপনার অ্যাপ্লিকেশনের প্রতিটি বিভাগের জন্য আপনার কাছে কিছু দরকার mod এটি কৌণিকের মতো কাজ করে। এটি গ্রাফকিউএল রিসলভার এবং পরিষেবাটির সাথে সেটআপ। নিয়ন্ত্রণকারীর সাথে REST কিছুটা আলাদা। প্রতিটি মডিউলে সম্ভবত একটি সত্তা থাকবে এবং যদি গ্রাফকিউএল, প্রজেক্ট.সেমি.গ্রাফিকাল।

projects.module.ts

import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { ProjectsService } from './projects.service';
import { Projects } from './projects.entity';

import { ProjectsResolvers } from './projects.resolvers';

@Module({
  imports: [
    TypeOrmModule.forFeature([Projects])],
  providers: [
    ProjectsService,
    ProjectsResolvers
  ],

})

export class ProjectsModule {}

চমৎকার। সুতরাং এর অর্থ কি আপনি একাধিক মডিউল জুড়ে কখনও কোনও বেস সত্তা ভাগ করতে পারেন বা সেই বেস সত্তাটি কি কোনও কমন্স মডিউলের অংশ হতে হবে?
জোশুয়া ডি লিওন

সম্ভবত, কৌণিকর মতো তবে এটি কখনও চেষ্টা করে দেখেনি।
প্রেস্টন

যদি এটি কাজ করে তবে দয়া করে উত্তর হিসাবে চিহ্নিত করুন।
প্রেস্টন

আমি মনে করি ইতিমধ্যে মডিউলটিতে সত্তা আমদানি করেছি। দয়া করে আপডেট পোস্টটি একবার দেখুন
আন্তন

1
আন্তন, আপনি যদি ইতিমধ্যে এটি সমাধান করে থাকেন তবে দয়া করে আপনার সমাধানটি এসওতে পোস্ট করুন।
প্রেস্টন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.