我正在构建一个react + typescript应用程序,其中我创建了一个模块,该模块的接口在我项目的所有类中都被使用。我的IDE很好地解决了这些接口,但是webpack总是发送以下错误。我尝试了不同的方法,但无法解决。
任何帮助将不胜感激
ERROR in ./assets/src/Pages/Login.tsx Module not found: Error: Can't resolve 'seeyouftp' in 'var/www/app/assets/src/Pages'
@ ./assets/src/Pages/Login.tsx 43:18-38
@ ./assets/src/Config/App.tsx
@ ./assets/entries/bundle.js
我的定义文件在这里
|— definitions
|— types.d.ts
|— entries
|— fonts
|— less
|— src
我的定义文件摘录
declare module 'seeyouftp' {
interface User {
admin: boolean;
roles: string[];
username: string;
}
enum AuthStates {
success = 'success',
error = 'error'
}
tsconfig.json
{
"compilerOptions": {
"allowJs": true,
"allowUnreachableCode": false,
"baseUrl": "./assets",
"esModuleInterop": true,
"forceConsistentCasingInFileNames": true,
"jsx": "react",
"lib": [
"dom",
"es2019",
"esnext"
],
"module": "commonjs",
"moduleResolution": "node",
"noImplicitAny": true,
"noImplicitReturns": true,
"outDir": "./dist/",
"resolveJsonModule": true,
"skipDefaultLibCheck": true,
"sourceMap": true,
"strictPropertyInitialization": false,
"strictNullChecks": true,
"target": "es5",
"typeRoots": [
"./assets/definitions/types.d.ts",
"./node_modules/@types"
],
"types": [
"node"
]
},
"include": [
"./assets/src/**/*",
"./assets/definitions/**/*"
],
"exclude": [
"node_modules"
]
}
我这样导入创建的接口:
import { Item, PlayableMedia } from 'seeyouftp';
答案 0 :(得分:2)
该错误消息实际上是非常令人误解的,看起来像是打字稿错误。
看来enums
无法直接导出,似乎必须使用 const
才能正确导出它们。
所以我像这样修改了enum
声明
declare module 'seeyouftp' {
// exporting a const instead of
export const enum AuthStates {
success = 'success',
error = 'error'
}
}
现在一切正常,但该错误消息非常非常糟糕且耗时
答案 1 :(得分:1)
尝试导出声明,看看是否有所不同:
declare module 'seeyouftp' {
export interface User {
admin: boolean;
roles: string[];
username: string;
}
export enum AuthStates {
success = 'success',
error = 'error'
}
答案 2 :(得分:0)
您需要在seeyouftp
下创建seeyouftp
(假设/definitions
是您的js模块名称)文件夹,并在types.d.ts
内包含/definitions/seeyouftp
,如下所示
|— definitions
|—seeyouftp
|— index.d.ts
|— entries
|— fonts
|— less
|— src
并更新您的tsconfig
"typeRoots": [
"./assets/definitions",
"./node_modules/@types"
],
答案 3 :(得分:0)
因为这是一个Webpack问题,所以您必须更新Webpack配置。需要告知Webpack在哪里找到模块seeyouftp
:
// webpack.config.js
const path = require('path');
module.exports = {
//...
resolve: {
// Add an alias
alias: {
'seeyouftp': path.resolve(__dirname, 'definitions/types.d.ts')
}
}
};
对于文件types.d.ts
的路径,我假设您的Webpack配置位于definitions
文件夹旁边。
Here是相关的Webpack文档。