• require后面不加default会报错


    在项目中用 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 了。

    广州vi设计公司 http://www.maiqicn.com 我的007办公资源网 https://www.wode007.com

    解决方法:

    '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 来获取。

  • 相关阅读:
    常用的字符集编码
    live555—VS2010/VS2013 下live555编译、使用及测试(转载)
    win32下Socket编程(转载)
    do{...}while(0)的意义和用法(转载)
    C++ static与单例模式
    MFC多线程各种线程用法 .
    a^1+b problem
    重返现世——题解
    第K大C
    懒癌
  • 原文地址:https://www.cnblogs.com/xiaonian8/p/13685424.html
Copyright © 2020-2023  润新知