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!
