【问题标题】:Error: No "exports" main defined in graphql-upload/package.json错误:graphql-upload/package.json 中没有定义“exports”主要
【发布时间】:2022-06-17 22:44:16
【问题描述】:

已经安装了graphql-upload,做

import { graphqlUploadExpress } from 'graphql-upload';

并得到这个错误: 错误:在 graphql-upload/package.json 中没有定义“exports”main

依赖关系:

"graphql-upload": "^14.0.0",
"graphql": "15.8.0",
"graphql-request": "^4.2.0",
"graphql-tools": "^8.2.0",
"@nestjs/axios": "^0.0.7",
"@nestjs/common": "^8.4.1",
"@nestjs/config": "^1.1.5",
"@nestjs/core": "^8.4.1",
"@nestjs/graphql": "^9.1.2",
"@nestjs/platform-express": "^8.0.0",

节点版本:v16.10.0

【问题讨论】:

    标签: javascript graphql nestjs express-graphql


    【解决方案1】:

    graphql-upload 库没有任何主要的 index.js 对其所有功能的重新导出。它具有所有特定功能的直接文件导出。它在exports 键下的package.json 文件中指定,如下所示:

    "exports": {
        "./GraphQLUpload.js": "./GraphQLUpload.js",
        "./graphqlUploadExpress.js": "./graphqlUploadExpress.js",
        "./graphqlUploadKoa.js": "./graphqlUploadKoa.js",
        "./package.json": "./package.json",
        "./processRequest.js": "./processRequest.js",
        "./Upload.js": "./Upload.js"
      },
    

    因此,您需要指定一个子模块路径,而不是直接从包根目录导入:

    import graphqlUploadKoa from "graphql-upload/graphqlUploadKoa.js";

    参考:package.json of graphql-upload

    【讨论】:

    • 然后使用 app.use(graphqlUploadExpress());并看到一个错误: TypeError: (0 , graphqlUploadExpress_js_1.default) is not a function at Function.main (/blablabla/src/main.ts:28:33) at processTicksAndRejections (node:internal/process/task_queues:95:5 ) 错误命令失败,退出代码为 1。
    • 对我来说,通过这样做import graphqlUploadExpress from 'graphql-upload/graphqlUploadExpress.js'graphqlUploadExpress 的类型返回了一个函数。确保在导入行中也写了 .js 扩展名。
    【解决方案2】:

    我个人为忽略错误设置了一个 ts-ignore。

    // @ts-ignore
    import GraphQLUpload from 'graphql-upload/GraphQLUpload.js';
    // @ts-ignore
    import Upload from 'graphql-upload/Upload.js';
    

    然后像这样导入。我希望它即使很脏也能有所帮助!

    【讨论】:

      【解决方案3】:

      所以问题出在 .default 构建设置中。 您可以删除它,但是当我们删除它时,我们发现其他模块存在问题,因此我们通过以下方式解决了这个问题:

      import Upload = require('graphql-upload/Upload.js');
      

      它看起来很脏,但它确实有效。

      您可以在 GitHub 上的问题中查看有关此模块的对话:https://github.com/jaydenseric/graphql-upload/issues/305#issuecomment-1136574019

      【讨论】:

        【解决方案4】:

        包的所有者只是选择限制从索引文件中导入所有内容,因此要运行新版本(> 13.0.0),您必须更改导入包的方式:

        const graphqlUploadExpress = require('graphql-upload/graphqlUploadExpress.js');
        

        const GraphQLUpload = require('graphql-upload/GraphQLUpload.js');
        

        或者,您可以将包下载到版本 13.0.0

        【讨论】:

          猜你喜欢
          • 2021-12-04
          • 2021-10-29
          • 1970-01-01
          • 2019-07-28
          • 2021-12-10
          • 2016-08-05
          • 2020-09-16
          • 2014-11-02
          • 2018-05-29
          相关资源
          最近更新 更多