require后面不加default会报错

时间: 2020-06-11阅读: 79标签: require

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

Failed to mount component: template or render function not defined

<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也不会报错,这是怎么回事呢

babel可以把 import/export 转成node 的 module.exports/ require 。

但是Babel@6不再export default 的module.exports了。

如果一个模块中仅仅export default, 那么就不用加.default了。如果除此之外还有别的对象被 export 出来,那不好意思,只能老老实实写default 了。


解决方法:

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

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

二,补充的知识点

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

 

借鉴:https://leotian.cn/posts/7a8a/https://www.cnblogs.com/caiguangbi-53/p/11757508.html
来自:https://www.cnblogs.com/yizhilin/archive/2020/06/26/13193556.html


站长推荐

1.云服务推荐: 国内主流云服务商,各类云产品的最新活动,优惠券领取。地址:阿里云腾讯云华为云

2.广告联盟: 整理了目前主流的广告联盟平台,如果你有流量,可以作为参考选择适合你的平台点击进入

链接: http://www.fly63.com/article/detial/9354

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!

文章投稿关于web前端网站点搜索站长推荐网站地图站长QQ:522607023

小程序专栏: 土味情话心理测试脑筋急转弯幽默笑话段子句子语录成语大全运营推广