typescript - 在节点中使用 Typescript 正确解析 GraphQL 模块
问题描述
在创建一个简单的 TypeScript 项目来制作 GraphQL 服务器时,我想将*.graphql
文件直接导入到我的代码中,例如schema.graphql
. 我已遵循有关模块声明的所有指示,以便可以进行此类导入。
VS Code 没有显示任何错误,但是 TSC 无法解决:
$ yarn tsc && node dist/index.js
yarn run v1.22.4
$ /home/arsleust/seedbox/back/node_modules/.bin/tsc
Done in 2.15s.
internal/modules/cjs/loader.js:638
throw err;
^
Error: Cannot find module './graphql/schema.graphql'
at Function.Module._resolveFilename (internal/modules/cjs/loader.js:636:15)
at Function.Module._load (internal/modules/cjs/loader.js:562:25)
at Module.require (internal/modules/cjs/loader.js:692:17)
at require (internal/modules/cjs/helpers.js:25:18)
at Object.<anonymous> (/home/arsleust/seedbox/back/dist/index.js:7:42)
at Module._compile (internal/modules/cjs/loader.js:778:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:789:10)
at Module.load (internal/modules/cjs/loader.js:653:32)
at tryModuleLoad (internal/modules/cjs/loader.js:593:12)
at Function.Module._load (internal/modules/cjs/loader.js:585:3)
我的项目:
./package.json
{
"name": "app",
"version": "1.0.0",
"dependencies": {
"apollo-server": "2.14.1",
"graphql": "15.0.0",
"graphql-tools": "6.0.5",
"nodemon": "2.0.4",
"ts-node": "8.10.2",
"typescript": "3.9.3"
}
}
./tsconfig.json
{
"compilerOptions": {
"target": "esnext",
"module": "commonjs",
"esModuleInterop": true,
"typeRoots": ["./node_modules/@types", "./@types"],
"outDir": "dist",
"sourceMap": true
},
"include": ["src", "./@types"],
"exclude": ["node_modules", "dist"]
}
./@types/index.d.ts
declare module '*.graphql' {
import { DocumentNode } from 'graphql';
const Schema: DocumentNode;
export = Schema;
}
./src/index.ts
import { ApolloServer } from 'apollo-server';
import typeDefs from './graphql/schema.graphql';
// Provide resolver functions for your schema fields
const resolvers = {
Query: {
hello: () => `Say hello to the new Apollo Server!`,
},
};
const server = new ApolloServer({ typeDefs, resolvers });
server.listen().then(({ url }) => {
console.log(`Server ready at ${url}`);
});
./src/graphql/schema.graphql
type Query {
hello: String!
}
当我查看时,tsc --traceResolution
我得到:
======== Resolving module './graphql/schema.graphql' from '/home/arsleust/seedbox/back/src/index.ts'. ========
Explicitly specified module resolution kind: 'NodeJs'.
Loading module as file / folder, candidate module location '/home/arsleust/seedbox/back/src/graphql/schema.graphql', target file type 'TypeScript'.
File '/home/arsleust/seedbox/back/src/graphql/schema.graphql.ts' does not exist.
File '/home/arsleust/seedbox/back/src/graphql/schema.graphql.tsx' does not exist.
File '/home/arsleust/seedbox/back/src/graphql/schema.graphql.d.ts' does not exist.
Directory '/home/arsleust/seedbox/back/src/graphql/schema.graphql' does not exist, skipping all lookups in it.
Loading module as file / folder, candidate module location '/home/arsleust/seedbox/back/src/graphql/schema.graphql', target file type 'JavaScript'.
File '/home/arsleust/seedbox/back/src/graphql/schema.graphql.js' does not exist.
File '/home/arsleust/seedbox/back/src/graphql/schema.graphql.jsx' does not exist.
Directory '/home/arsleust/seedbox/back/src/graphql/schema.graphql' does not exist, skipping all lookups in it.
======== Module name './graphql/schema.graphql' was not resolved. ========
解决方案
推荐阅读
- qgis - 我可以在 WFS 图层上手动移动 QGIS 3 中的标签吗
- javascript - 在 Web 组件模板中从外部加载 CSS 文件
- android - 纵向模式下的屏幕方向
- javascript - 本地执行 Google:https 请求失败
- c++ - QT的官方文档中为什么使用static_cast
- javascript - 在反应应用程序中使用反应路由进行路由
- android-gradle-plugin - 如何禁用默认的 gradle buildType 后缀(-release,-debug)
- android - SQlite Data on selection 不存在显示虽然插入了数据
- php - 重定向后显示来自另一个数据库表的特定数据 - Laravel
- node.js - 通过 AWS SES 发送电子邮件时的 Openssl 问题