Webpack代码拆分打破了使用vueJs组件的导入

时间:2017-07-10 23:32:00

标签: javascript webpack vue.js babel jest

Jest在尝试加载具有动态导入代码的vueJs组件时抛出错误。

组件:

<script>
    const Modal = () => import(/* webpackChunkName: "Modal" */ "../pages/common/Modal.vue");

    export default {
        name: "TileEditModal",
        components: {
            Modal
        },
        data() {
            return 
        },
        methods: {
            test() {
                return true;
            }
        }
    }
</script>

测试:

import TileEditModal from "./TileEditModal.vue"

即使没有运行测试,只需导入该组件也会引发以下错误:

  return import( /* webpackChunkName: "Modal" */"../pages/common/Modal.vue");
           ^^^^^^
SyntaxError: Unexpected token import

  at ScriptTransformer._transformAndBuildScript (node_modules/jest-runtime/build/ScriptTransformer.js:289:17)
  at Object.<anonymous> (srcVue/pages/landing/TileEditModal.vue.test.js:3:22)

我试过这个solution,但它对我没用。

我正在使用jest-vue-preprocessor和jest:

  "jest": {
    "moduleFileExtensions": [
      "js",
      "vue"
    ],
    "transform": {
      "^.+\\.js$": "<rootDir>/node_modules/babel-jest",
      ".*\\.(vue)$": "<rootDir>/node_modules/jest-vue-preprocessor"
    },
    "clearMocks": true,
    "resetMocks": true,
    "resetModules": true
  },

我也尝试将env.test预设添加到babel:

{
    "presets": [
      "es2015",
      "stage-2",
      "stage-0"
    ],
    "env": {
      "test": {
        "presets": [
          "es2015",
          "stage-2",
          "stage-0"
        ]
      }
    } 
  }

到目前为止,没有任何作品,任何想法?我真的希望将这些代码拆分为单个组件。

1 个答案:

答案 0 :(得分:3)

对我有用的解决方案是使用dynamic import babel plugin,但也可以在没有缓存的情况下运行jest。

  

jest --no-cache

不幸的是,在那之后再次使用缓存运行它仍然无法通过测试,所以我不确定发生了什么,但是如果我离开--no-cache它会起作用。只是让测试更慢。