我们的ncc构建(版本0.18.5)在将pg-promise从8.7.5升级到10.3.1后失败
Error: Module not found: Error: Can't resolve 'pg-promise/typescript/pg-subset' in ...问题发生在我们添加了以下import语句之后:
import { IConnectionParameters } from 'pg-promise/typescript/pg-subset';关于pg-promise库的奇怪之处在于它有两个d.ts文件(github-link):

也许这很好,我只是以前没见过。
大多数其他库要么为每个js文件提供一个d.ts文件,要么包含整个库的所有类型的单个.d.ts文件。
在库的package.json中,它只提到了一种类型:
"typings": "typescript/pg-promise.d.ts",当我们构建项目时,main.js输出包含对pg-subset的要求
module.exports = require("pg-promise/typescript/pg-subset");然后将此main.js文件传递给导致错误的ncc build。
我在这里有点迷茫,因为我没有太多的经验来使用webpack和模块系统:但我认为要求pg-subset会失败,因为没有相关的js文件,对吧?
有什么想法吗?
发布于 2019-12-17 23:38:58
更新14.03.2021
我认为我们应该使用type-only-import来解决这个问题:
import type { IConnectionParameters } from 'pg-promise/typescript/pg-subset';我们的项目已经发生了很大的变化,所以我无法确认。
原创
我想出了一个令人讨厌的快速修复来让ncc编译再次工作。
在我的项目中,我添加了一个文件pg-subset.ts,它只重新导出使用过的接口:
import { IConnectionParameters as IConnectionParametersOrig } from 'pg-promise/typescript/pg-subset';
/**
* this file is a quick-fix for the ncc build
*/
export type IConnectionParameters = IConnectionParametersOrig;在所有其他文件中,我将导入更改为使用此项目文件(而不是pg-promise/typescript/pg-subset)。
然后编译就可以了--但我不明白为什么:
例如,现在我们仍然导入pg-promise/typescript/pg-subset (在新项目的pg-subset.ts文件中导入一次)。
但这一次main.js文件不再包含这一行:
module.exports = require("pg-promise/typescript/pg-subset");https://stackoverflow.com/questions/59321355
复制相似问题