Umi: 从umi中导入Effect, Reducer等模块时提示找不到

Created on 16 Mar 2020  ·  18Comments  ·  Source: umijs/umi

What happens?


按照文档示例在model文件中尝试import { Effect, Reducer, Subsription } from 'umi',控制台提示模块“"../../../node_modules/umi/types"”没有导出的成员“Effect”。等消息


复现步骤,错误日志以及相关配置

在model文件中import { Effect, Reducer, Subsription } from 'umi'

有尝试按照文档中的提示进行自检,已在.umirc.ts中开启配置如下

export default defineConfig({
    ...
   dva: {},
   ...
})

tsconfig.json

{
  “compilerOptions”:{
   ...
    "paths": {
      "@/*": ["src/*"],
      "@@/*": ["src/.umi/*"]
    },
  }
}


相关环境信息

  • Umi 版本:3.0.7
  • Node 版本:12.14.1

Most helpful comment

在src/models/ 下新建一个文件 xxx.ts

export default{
    namespace:'xxx'
}

就OK了。如果models/下没有文件或者没有model的export,配置写了也不会加载插件- -

All 18 comments

运行一下,需要在 src/.umi 生成一个文件夹,提示就正常了。

运行一下,需要在 src/.umi 生成一个文件夹,提示就正常了。

运行了,在src/.umi下也生成了文件,这是我的项目地址,项目地址

遇到同样的问题,ts报错在Node_modules/umi/types没有导出这些,修改如下tsconfig配置并宠妻vscode解决了,如若@/寻找组件模块不存在则tsconfig未生效。

{
  "compilerOptions": {
    "baseUrl": "./",
    "outDir": "build",
    "module": "esnext",
    "target": "ES6",
    "lib": ["esnext", "dom"],
    "sourceMap": true,
    "allowJs": true,
    "jsx": "react",
    "moduleResolution": "node",
    "rootDir": ".",
    "forceConsistentCasingInFileNames": true,
    "noImplicitReturns": true,
    "noImplicitThis": true,
    "noImplicitAny": true,
    "noUnusedLocals": true,
    "noUnusedParameters": true,
    "strictNullChecks": true,
    "importHelpers": true,
    "suppressImplicitAnyIndexErrors": true,
    "experimentalDecorators": true,
    "downlevelIteration": true,
    "allowSyntheticDefaultImports": true,
    "paths": {
      "@/*": ["src/*"],
      "@@/*": ["src/.umi/*"]
    }
  },
  "exclude": [
    "node_modules",
    "build",
    "dist",
    "scripts",
    "acceptance-tests",
    "webpack",
    "jest",
    "src/setupTests.ts",
    "tslint:latest",
    "tslint-config-prettier"
  ]
}

遇到同样的问题,ts报错在Node_modules/umi/types没有导出这些,修改如下tsconfig配置并宠妻vscode解决了,如若@/寻找组件模块不存在则tsconfig未生效。

{
  "compilerOptions": {
    "baseUrl": "./",
    "outDir": "build",
    "module": "esnext",
    "target": "ES6",
    "lib": ["esnext", "dom"],
    "sourceMap": true,
    "allowJs": true,
    "jsx": "react",
    "moduleResolution": "node",
    "rootDir": ".",
    "forceConsistentCasingInFileNames": true,
    "noImplicitReturns": true,
    "noImplicitThis": true,
    "noImplicitAny": true,
    "noUnusedLocals": true,
    "noUnusedParameters": true,
    "strictNullChecks": true,
    "importHelpers": true,
    "suppressImplicitAnyIndexErrors": true,
    "experimentalDecorators": true,
    "downlevelIteration": true,
    "allowSyntheticDefaultImports": true,
    "paths": {
      "@/*": ["src/*"],
      "@@/*": ["src/.umi/*"]
    }
  },
  "exclude": [
    "node_modules",
    "build",
    "dist",
    "scripts",
    "acceptance-tests",
    "webpack",
    "jest",
    "src/setupTests.ts",
    "tslint:latest",
    "tslint-config-prettier"
  ]
}

按照你的这个配置了,也重新生成了.umi里的文件,也更新了全局umi版本到最新,可是还是提示没有导出

我也是碰到了同样的问题

设置完tsconfig后要重新启动vscode或者重新加载项目才会生效。

遇到同样的问题,ts报错在Node_modules/umi/types没有导出这些,修改如下tsconfig配置并宠妻vscode解决了,如若@/寻找组件模块不存在则tsconfig未生效。

{
  "compilerOptions": {
    "baseUrl": "./",
    "outDir": "build",
    "module": "esnext",
    "target": "ES6",
    "lib": ["esnext", "dom"],
    "sourceMap": true,
    "allowJs": true,
    "jsx": "react",
    "moduleResolution": "node",
    "rootDir": ".",
    "forceConsistentCasingInFileNames": true,
    "noImplicitReturns": true,
    "noImplicitThis": true,
    "noImplicitAny": true,
    "noUnusedLocals": true,
    "noUnusedParameters": true,
    "strictNullChecks": true,
    "importHelpers": true,
    "suppressImplicitAnyIndexErrors": true,
    "experimentalDecorators": true,
    "downlevelIteration": true,
    "allowSyntheticDefaultImports": true,
    "paths": {
      "@/*": ["src/*"],
      "@@/*": ["src/.umi/*"]
    }
  },
  "exclude": [
    "node_modules",
    "build",
    "dist",
    "scripts",
    "acceptance-tests",
    "webpack",
    "jest",
    "src/setupTests.ts",
    "tslint:latest",
    "tslint-config-prettier"
  ]
}

按照你的这个配置了,也重新生成了.umi里的文件,也更新了全局umi版本到最新,可是还是提示没有导出

设置完tsconfig后要重新启动vscode或者重新加载项目才会生效。

在src/models/ 下新建一个文件 xxx.ts

export default{
    namespace:'xxx'
}

就OK了。如果models/下没有文件或者没有model的export,配置写了也不会加载插件- -

在src/models/ 下新建一个文件 xxx.ts

export default{
  namespace:'xxx'
}

就OK了。如果models/下没有文件或者没有model的export,配置写了也不会加载插件- -
确实是这样子;

其实是否应该做成在.umirc.ts里面只要引入dva的配置,就直接加载插件呢...
必须保存才加载插件,在没保存之前一直报错,这个很影响开发体验,并且会让开发者觉得,是否哪里的问题...

这个问题有什么进展吗?总是报错心态崩了啊 @sorrycc

一般跟你tsconfig.json中的paths这个配置项有关,试下改成这样吧
"paths": { "@/*": ["./src/*"], "@@/*": ["./src/.umi/*"] }

一般跟你tsconfig.json中的paths这个配置项有关,试下改成这样吧
"paths": { "@/*": ["./src/*"], "@@/*": ["./src/.umi/*"] }

我的配置文件

{
  "compilerOptions": {
    "outDir": "build/dist",
    "module": "esnext",
    "target": "esnext",
    "lib": ["esnext", "dom"],
    "sourceMap": true,
    "baseUrl": ".",
    "jsx": "react",
    "allowSyntheticDefaultImports": true,
    "moduleResolution": "node",
    "forceConsistentCasingInFileNames": true,
    "noImplicitReturns": true,
    "suppressImplicitAnyIndexErrors": true,
    "noUnusedLocals": true,
    "allowJs": true,
    "skipLibCheck": true,
    "experimentalDecorators": true,
    "strict": true,
    "paths": {
      "@/*": ["./src/*"],
      "@@/*": ["./src/.umi/*"]
    }
  },
  "exclude": ["node_modules", "build", "dist", "scripts", "acceptance-tests", "webpack", "jest"]
}

一般跟你tsconfig.json中的paths这个配置项有关,试下改成这样吧
"paths": { "@/*": ["./src/*"], "@@/*": ["./src/.umi/*"] }

我的配置文件

{
  "compilerOptions": {
    "outDir": "build/dist",
    "module": "esnext",
    "target": "esnext",
    "lib": ["esnext", "dom"],
    "sourceMap": true,
    "baseUrl": ".",
    "jsx": "react",
    "allowSyntheticDefaultImports": true,
    "moduleResolution": "node",
    "forceConsistentCasingInFileNames": true,
    "noImplicitReturns": true,
    "suppressImplicitAnyIndexErrors": true,
    "noUnusedLocals": true,
    "allowJs": true,
    "skipLibCheck": true,
    "experimentalDecorators": true,
    "strict": true,
    "paths": {
      "@/*": ["./src/*"],
      "@@/*": ["./src/.umi/*"]
    }
  },
  "exclude": ["node_modules", "build", "dist", "scripts", "acceptance-tests", "webpack", "jest"]
}

看下你的项目目录结构

一般跟你tsconfig.json中的paths这个配置项有关,试下改成这样吧
"paths": { "@/*": ["./src/*"], "@@/*": ["./src/.umi/*"] }

我的配置文件

{
  "compilerOptions": {
    "outDir": "build/dist",
    "module": "esnext",
    "target": "esnext",
    "lib": ["esnext", "dom"],
    "sourceMap": true,
    "baseUrl": ".",
    "jsx": "react",
    "allowSyntheticDefaultImports": true,
    "moduleResolution": "node",
    "forceConsistentCasingInFileNames": true,
    "noImplicitReturns": true,
    "suppressImplicitAnyIndexErrors": true,
    "noUnusedLocals": true,
    "allowJs": true,
    "skipLibCheck": true,
    "experimentalDecorators": true,
    "strict": true,
    "paths": {
      "@/*": ["./src/*"],
      "@@/*": ["./src/.umi/*"]
    }
  },
  "exclude": ["node_modules", "build", "dist", "scripts", "acceptance-tests", "webpack", "jest"]
}

看下你的项目目录结构

image

pro项目

没导出类型,我的是2.9版本的,也没导出。用
import { Reducer } from 'redux';
import { Effect } from 'dva'; 来代替即可

重现这个问题,应该是类型的导出的问题

确定配置没问题并且 models 下有model 后删除 .umi 重新执行 umi generate tmp 后解决了这个问题。我的 umi 版本是 3.2.19

在src/models/ 下新建一个文件 xxx.ts

export default{
  namespace:'xxx'
}

就OK了。如果models/下没有文件或者没有model的export,配置写了也不会加载插件- -

这样才行吧,必须export default xxx

Was this page helpful?
0 / 5 - 0 ratings

Related issues

sorrycc picture sorrycc  ·  4Comments

ironyfive picture ironyfive  ·  3Comments

six-666 picture six-666  ·  3Comments

miaojinxing picture miaojinxing  ·  3Comments

y2891663091 picture y2891663091  ·  4Comments