require一个node模块什么时候需要加上.default
最近项目开发中,在代码中看到require('./routes').default,为什么要添加default呢?于是研究了下。
首先看下代码中的router模块:
//router模块 let router = new VueRouter({...}) export default router
在组件或者其它模块引入router模块,可以有以下2种方式:
方式1:在index.js中使用ES6的import方法导入方式require引入router模块
//index.js中导入router.js中的router模块 import router from './router'
方式2:在index.js中使用CommonJS的模块导入方式require引入router模块,则需要使用 .default 来获取实际的组件选项
//index.js中导入router.js const router = require('./routes').default;
为什么会出现方式2的情况?
前端代码上线前如果使用webpack打包编译的,babel@5及之前的版本可以把export和import转成node的module.exports和require ,但是babel@6版本开始不再把export default转成node的module.exports,参考https://github.com/babel/babel/issues/2212,
所以使用babel@6的版本才会出现方式2的情况,比如:
使用Babel@6 编译下面的模块
export default 'router'
可得到以下编译结果,你也可以打开babeljs.io在线编译试试看
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = 'router';
因此,需要require形式引入模块,需要添加.default
require( ' ./router.js ') // {默认值:'router'} require( ' ./router.js ').default// 'router'
当然你如果不喜欢这种方式,也可以回到babel@5的效果,通过引入babel-plugin-add-module-exports这个plugin可以解决这个问题,以下是编译效果:
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = 'router'; module.exports = exports['default'];
作者:白树
出处:http://peunzhang.cnblogs.com/
您觉得本文不错,可打赏博主,或点击右下角【好文要顶】支持博主。

很多人在看的文章
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述