Dva: app.model: namespace should be defined(…)

Created on 10 Nov 2016  ·  11Comments  ·  Source: dvajs/dva

不用atool-build打包,用标准webpack打包时,打包后文件运行报错
image

question

Most helpful comment

换成 import 导入就ok了,

import indexModel from './model/index.js';
app.model(indexModel);

All 11 comments

出错信息很明确了,model 没有 namespace 属性。

不是这样的,所有的model肯定是有namespace的,同样的源码,用atool-build打出来的就正常,我也是奇怪。用atool-build打包的时候有个很神奇的问题,做的按需加载,超过是10个模块的时候,就一直卡在哪里,所以才试着换成标准webpack来尝试,用webpack打包,不卡死,但是报这个错误。
路由的配置就是很标准的splitcode写法
image

看下报错堆栈信息看? https://github.com/dvajs/dva/blob/831b7d9/src/createDva.js#L242-L245 这一行抛的错。

我在createDva中加断点,看到的是这样
image
model有值,default有,但是
image

刚对比了一下用atool-build打包出来的,model就是直接有值的
image
webpack打包的是这样的:
image

没加 babel-plugin-add-module-exports ?

确实,是这个问题,加了export default{}的就可以了。

但是还是不懂为什么atool-build打包的时候,为什么卡住不动,这个问题很神奇,少一个模块就很快处理了。

atool-build 加入到维护中的项目里确实有点怪怪的。

换成 import 导入就ok了,

import indexModel from './model/index.js';
app.model(indexModel);

最终解决,还是需要add-module-exports才可以

{
  "presets": [
    [
      "@babel/preset-env",
      {
        "modules": "cjs",
        "useBuiltIns": "entry",
        "corejs": 3,
        "targets" : "> 0.25%, not dead"
      }
    ], "@babel/preset-react"
  ],
  "plugins": [
    ["add-module-exports", { "addDefaultProperty": true }],
  ]
}
Was this page helpful?
0 / 5 - 0 ratings