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

相關文章
相關標籤/搜索