javascript - Typescript/Node: Feil [ERR_MODULE_NOT_FOUND]: Kan ikke finne modul


Jeg ser feilen jeg spesifiserte i tittelen min, og ingen av de eksisterende løsningene her ser ut til å hjelpe, så jeg håper noen kan gi meg innsikt i hva som foregår.

Jeg bruker Typescript og Node i prosjektet mitt. TS kompilerer alt helt fint... Jeg ender opp med følgende som forventet:

projectHome/
   dist/
      schema/
          schema.js
      index.js

Når jeg kjører node ./dist/index.js fra prosjektets hjem, får jeg feilen kan ikke finne modul '/home/me/projectHome/dist/schema/schema' importert fra '/home/me/projectHome/dist/index.js'

Relative importer i index.js er som følger:

    import express from 'express';
    import { ApolloServer } from 'apollo-server-express';
    import typeDefs from './schema/schema';

Min schema.ts-fil inneholder:

    import { ApolloServer, gql } from 'apollo-server-express'
    import { GraphQLScalarType } from 'graphql'

        const typeDefs = gql`
           ...(edited for brevity/sanity)
        `

    export default typeDefs

og min typescript-fil (bør dette ha betydning på dette tidspunktet siden det er Node som feiler??) ser slik ut:

    {
        "compilerOptions": {
        "target": "ES6",                         
        "module": "ES6",                         
        "lib": ["ES6"],                          
        "allowJs": true,                         
        "sourceMap": true,                       
        "outDir": "./dist",                      
        "rootDir": "./src",                      
        "strict": true,                          
        "skipLibCheck": true,                    
        "forceConsistentCasingInFileNames": true 
    },

    "files": ["src/@types/graphql.d.ts"],
    "include": ["src/**/*", "serverInfo.json"],
    "exclude": ["node_modules", "**/*.spec.ts"]
    }

Merk at jeg ikke kan bruke commonjs fordi noe kode relatert til innvendinger feiler når jeg gjør det. Er problemet faktisk relatert til bruk av ES6-moduler, eller er det noe annet som er galt?

Takk på forhånd!

-Chris

Svar #1

Du må bruke fullstendig kvalifiserte imports når du sender ES6-moduler til Node.js.

I ditt tilfelle betyr dette å legge til .js-utvidelsen til ditt schema-import:

 import express from 'express';
 import { ApolloServer } from 'apollo-server-express';
-import typeDefs from './schema/schema';
+import typeDefs from './schema/schema.js';

Forvirringen din kommer sannsynligvis fra det faktum at dette kravet har endret seg mellom de tradisjonelle require()-stil referansene (kalt "CommonJS", og forklart mer her), og de mer moderne ECMAScript-modulene — men i mellomtiden håndterte mange verktøy som konverterte mellom den ene og den andre dette problemet for deg (f.eks. Webpack og lignende). Nå som disse funksjonene blir tilgjengelige som førsteklasses funksjoner i Node, støter du på noen ytterligere ting som eldre verktøy Magically™ gjorde for deg, men som faktisk ikke fungerer på den måten i spesifikasjonen!

Relaterte artikler