require后面不加default会报错

在项目中用 require('./Download.vue') 引入一个组件的时缺乏.default 会报错:javascript

Failed to mount component: template or render function not defined
html

<template>
  <div id="app">
    <Download />
  </div>
</template>
<script type="application/javascript">
   let Download = require('./Download.vue').default

export default {
  name: 'app',
  components: {
    Download
  }
}
</script>

而有的时候不加.default也不会报错,这是怎么回事呢vue

babel能够把 import/export 转成node 的 module.exports/ require 。java

可是Babel@6再也不export default 的module.exports了。node

若是一个模块中仅仅export default, 那么就不用加.default了。若是除此以外还有别的对象被 export 出来,那很差意思,只能老老实实写default 了。webpack

解决方法:web

'use strict';
Object.defineProperty(exports, "__esModule", {
  value: true
});
exports.default = 'foo';
module.exports = exports['default'];

// 调用时
require('./bundle.js') // foo

 

二,补充的知识点babel

首先 webpack 支持 CommonJS、AMD 和 ES6模块打包。当咱们用 .vue 单文件写组件时,在 script 标签内使用的是 ES6 的语法且使用 export default 进行默认导出。然而,require 是 CommonJS 的模块导入方式,不支持模块的默认导出,所以导入的结果实际上是一个含 default 属性的对象,所以须要使用 .default 来获取实际的组件,固然咱们也能够使用 ES6 的 import 语句,若是使用 import,须要给定一个变量名,全部 import 语句必须统一放在模块的开头。相反,若是 .vue 文件中使用 CommonJS 或 AMD 模块化语法,使用 module.exports 对象进行导出,那么使用 require 导入时就不须要使用 .default 来获取。app

 

借鉴:https://leotian.cn/posts/7a8a/模块化

   http://www.javashuo.com/article/p-hrxwakfp-ka.html

相关文章
相关标签/搜索