在項(xiàng)目中用 require('./Download.vue') 引入一個(gè)組件的時(shí)缺少.default 會(huì)報(bào)錯(cuò):
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>
而有的時(shí)候不加.default也不會(huì)報(bào)錯(cuò),這是怎么回事呢
babel可以把 import/export 轉(zhuǎn)成node 的 module.exports/ require 。
但是Babel@6不再export default 的module.exports了。
如果一個(gè)模塊中僅僅export default, 那么就不用加.default了。如果除此之外還有別的對(duì)象被 export 出來(lái),那不好意思,只能老老實(shí)實(shí)寫(xiě)default 了。
解決方法:
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = 'foo'; module.exports = exports['default']; // 調(diào)用時(shí) require('./bundle.js') // foo
二,補(bǔ)充的知識(shí)點(diǎn)
首先 webpack 支持 CommonJS、AMD 和 ES6模塊打包。當(dāng)我們用 .vue 單文件寫(xiě)組件時(shí),在 script 標(biāo)簽內(nèi)使用的是 ES6 的語(yǔ)法且使用 export default 進(jìn)行默認(rèn)導(dǎo)出。然而,require 是 CommonJS 的模塊導(dǎo)入方式,不支持模塊的默認(rèn)導(dǎo)出,因此導(dǎo)入的結(jié)果其實(shí)是一個(gè)含 default 屬性的對(duì)象,因此需要使用 .default 來(lái)獲取實(shí)際的組件,當(dāng)然我們也可以使用 ES6 的 import 語(yǔ)句,如果使用 import,需要給定一個(gè)變量名,所有 import 語(yǔ)句必須統(tǒng)一放在模塊的開(kāi)頭。相反,如果 .vue 文件中使用 CommonJS 或 AMD 模塊化語(yǔ)法,使用 module.exports 對(duì)象進(jìn)行導(dǎo)出,那么使用 require 導(dǎo)入時(shí)就不需要使用 .default 來(lái)獲取。
借鑒:https://leotian.cn/posts/7a8a/
https://www.cnblogs.com/caiguangbi-53/p/11757508.html
聯(lián)系客服