首页 > 其他分享 >export default无法被解构

export default无法被解构

时间:2024-03-25 17:13:10浏览次数:19  
标签:__ default require js webpack export user 解构

最近在做项目过程中,遇到一个问题,对一个UI组件,解构出我们需要的组件,进行注册,但是运行的时候报错了,写了一个小例子

//user.js
export default {
obj:{name:1111},
obj2:{name:22222},
}

// index.js
import {obj,obj2} from "./user.js"

console.log(obj,obj2)
代码运行编译时候报错了

 

说没有找到obj和obj2,这是为什么?

下面我们深入webpack打包的原理深入去看下,通过import导入进来的是一个什么?
我们来把代码修改下

//user.js
export default {
obj:{name:1111},
obj2:{name:22222},
}

// index.js
// index.js 页面
import user from "./user.js"
console.log(user)
通过 webpack打包下,然后来看下,打包完以后,在main.js,把index.js打包编译成什么样子

 

看过webpack打包源码的都知道,通过import导入在打包的时候
import会被替换成__webapck_require_方法,去获取,参数1是因为我们现在有两个文件,一个是index.js,一个是user.js,在打包的时候,会把他们放在一个数组里面,1代码是在数组的index位置

我们在console里面输入的user,但是打包后是返回一个对象取对象里面的default属性,

_user_js__WEBPACK_IMPORTED_MODULE_0__这返回的是一个对象,我们就知道,在通过export导出的文件里面,返回的是一个类似

var _user_js__WEBPACK_IMPORTED_MODULE_0__ = {
default:...,
}
import user from "./user.js"

console.log(_user_js__WEBPACK_IMPORTED_MODULE_0__["default"])
user取的值是返回对象的default属性值,但是不可以直接在import这里解构,因为他还没有进行转换,我们可以先赋值,再解构

import user from "./user.js"

let { obj, obj2 } = user
这样我们是可以解构,因为user拿到的是返回对象的 default 的属性值

我们也可以拿到返回的那个大对象

// user.js
export default {
obj:{name:1111},
obj2:{name:22222},
}
export const name = '科比'


// index.js
import * as user from "./user.js"

console.log(user)
打印出来看下,可以拿到所有的对象


那 export 和 module.exports 有什么区别呢?
module.exports的导出会简单,来看下webpack的main.js文件

(() => {
"use strict";
__webpack_require__.r(__webpack_exports__);

var _news_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1);

var _news_js__WEBPACK_IMPORTED_MODULE_0___default = __webpack_require__.n(_news_js__WEBPACK_IMPORTED_MODULE_0__);

console.log((_news_js__WEBPACK_IMPORTED_MODULE_0___default()))

})();
通过__webpack_require__获取 news.js,来看下__webpack_require__函数返回的内容

 

可以看到 __webpack_require__返回的就是module.exports,就是news返回那个数组

然后又调用了__webpack_require__.n方法

 

因为我们用的是module.exports,是common.js,不是__esModule,所以走后面那个函数,所以返回的还是原来的news.js里面 module.exports的数组

标签:__,default,require,js,webpack,export,user,解构
From: https://www.cnblogs.com/LylePark/p/18094822

相关文章

  • 为什么 export 导出一个字面量会报错,而使用 export default 就不会报错?
    核心其实总的来说就是export导出的是变量的句柄(或者说符号绑定、近似于C语言里面的指针,C++里面的变量别名),而exportdefault导出的是变量的值。需要注意的是:模块里面的内容只能在模块内部修改,模块外部只能使用。esModule在语法层面做了一层浅层的保护(即将import导入的变量......
  • export { default as useUserInfoStore } from './userInfo' 这是什么写法
    这段代码是ES6模块导出的一种简写形式,被称为“命名导出”。它的作用是从源模块('./userInfo')导入默认导出,并赋予一个新的本地名称('useUserInfoStore')。这种写法可以让使用者在引用时,直接使用新的本地名称,而不是原始模块的默认导出名称。详细解释:'./userInfo'表示当前模块......
  • k8s证书监控--x509-certificate-exporter
    目录k8s证书监控--x509-certificate-exporter一、下载并解压二、推送镜像到镜像仓库三、根据实际情况修改values.yaml,其他配置可不做修改四、配置监控以及告警五、异常处理k8s证书监控--x509-certificate-exporter一、下载并解压下载并解压helm包x509-certificate-exporter-3.1......
  • [踩坑回顾]前端项目打包编译之后,页面访问异常:exports is not defined.
    周一遇到的问题,是qiankun框架的一个vue2子项目,使用yudao开源框架二次开发。 排查:1.开发环境正常。2.项目迁移前使用的babel、package配置均未被使用过。3.考虑打包使用的命令错误。发现未按照官方教程使用npm进行编译,后端同事用pom.xml文件使用pnpm命令进行编译。 解......
  • 340_依赖循环引用Relying upon circular references is discouraged and they are pro
    报错信息15:21:53.398[main]ERRORo.s.b.d.LoggingFailureAnalysisReporter-[report,40]-***************************APPLICATIONFAILEDTOSTART***************************Description:Thedependenciesofsomeofthebeansintheapplicationcontextf......
  • 【编程向导】JavaScript-基础语法-解构赋值
    梦里繁花落尽,此情未央,此意难忘,弦虽断,曲犹扬。!与技术共同呼吸,与程序员共命运。世树科技承“技驱动,理致胜”理念、国风编程。解构赋值解构赋值(Destructing)语法是一个JavaScript表达式,这使得可以将值从数组或属性从对象提取到不同的变量中。数组的解构赋值varfoo......
  • 解释nginx.conf.default 中关于fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_sc
    在nginx配置中,fastcgi_param指令用于定义传递给FastCGI服务器(如PHP-FPM)的参数。这些参数是FastCGI协议的一部分,用于在nginx和PHP-FPM之间传递关于请求的信息。在给出的配置片段中:nginxfastcgi_paramSCRIPT_FILENAME/scripts$fastcgi_script_name;这一行定义了一个FastCGI......
  • OpenMP - default子句
    OpenMP是基于共享内存编程模型的,这意味着除非明确指定,否则所有的变量在并行区域中都是共享的。使用default子句,程序员可以更改这种默认行为。default(none)指定在并行区域内,除非明确指定为shared或private,否则所有变量都是未定义的。这要求程序员显式地指定每个变量的作用域;defau......
  • openGauss监控之exporter部署
    openGauss监控之exporter部署概述opengauss_exporter是为openGauss数据库量身打造的数据采集工具,配合当前最受欢迎的监控报警框架prometheus+grafana组合实时展示数据库信息,为openGauss数据库的平稳运行保驾护航。opengauss_exporter同openGauss数据库一样是开源......
  • MogDB-openGauss default privileges 使用方法
    MogDB/openGaussdefaultprivileges使用方法权限是用户访问数据库对象的首要条件,每个新增用户默认属于PUBLIC角色组成员,也就是具有PUBLIC角色组的权限,但在日常业务使用中,仅仅具有PUBLIC权限是远远不够的,还需要具有额外的权限,在MogDB/openGauss数据库支持的业务中经常需......