Webpack学习笔记 01、Module模块系统(二)

简介: Webpack学习笔记 01、Module模块系统(二)

四、Module的注意事项


4.1、模块顶层的this指向


结论:在模块中,顶层的this指向undefined,这就能够很好的解决模块化的问题!


示例:


2.js


console.log(this);


exer.html


<!-- 对于引入模块的需要设置type="module" -->
<script type="module">
    // 注意了若是引入的模块中使用了export default,那么就必须先引入该expert default的值
    import './modules/2.js';
</script>




4.2、import关键字和import()函数


import关键字的使用(自动提升,但是不能够进行逻辑判断执行引入)


import:具有提升效果,会将该语句提升到模块的头部,率先执行。也就是说import执行的时候,代码还没有执行。


import与export命令只能在模块的顶层不能在代码块中执行。

示例:


2.js


console.log(`模块中的开始执行......,输出this为:${this}`);


exer.html


<!-- 对于引入模块的需要设置type="module" -->
<script type="module">
    console.log("hello");
    console.log("changlu!");
    //故意将引入模块放在前面两句console.log()后输出
    import './modules/2.js';
</script>



缺点:对于我们想要适配pc端或是手机端时,选择哪个来进行引入仅仅使用import关键字是不够的,因为一旦使用import关键字的话就会直接进行执行,而不是根据逻辑来进行判断引入哪个js文件!下面是示例实际上是不允许的:


<!-- 对于引入模块的需要设置type="module" -->
<script type="module">
    const pc = true;
    //是不允许以下这么进行逻辑判断引入js的!会报错:Uncaught SyntaxError: Unexpected string
    if (pc) {
        import './modules/pc.js';
    } else {
        import './modules/mobile.js'
    }
</script>



import()函数


import():使用该函数能够配合逻辑判断引入,而不是像import一样具有提升效果直接引入,弥补了import关键字的缺点!


示例:


<!-- 对于引入模块的需要设置type="module" -->
<script type="module">
    const pc = true;
    //通过使用import()函数就能够进行逻辑判断后导入指定的js模块
    if (pc) {
        import('./modules/pc.js').then(module => { console.log(module) });
    } else {
        import('./modules/mobile.js').then(module => { console.log(module) });
    }
</script>




4.3、导入导出的复合写法


介绍


复合写法:就是说一条语句能够既导入又导出的操作!缺点就是不能对导出的变量执行任何操作!!!


用途:就是达到了中转站的效果!


注意点:复合语句中export后的值无论是单个还是多个必须是{}包裹,否则会报语法错误,并且不能执行对导出的变量进行任何操作!



示例


mobile.js


export const num = 10;


pc.js


//export的复合写法
export { num } from './mobile.js'
//复合写法相当于执行了引入与导出两步操作
//①import { num } from './mobile.js'
//②export { num } from './mobile.js'
//注意:不能有任何对num的操作,例如输出、修改等等操作
// console.log(num);


exer.html


<!-- 对于引入模块的需要设置type="module" -->
<script type="module">
    import { num } from './modules/pc.js'
    console.log(num);
</script>




五、实际应用


一般的话js代码都是基于对象来进行编写的,一般将一个类或者常量或者说是单独的功能模块都使用Module模块系统来进行抽离,有利于代码的可扩展性!!!


比如说抽离的内容如:常量以及默认参数一块、某个设置默认参数对象、类或者说单独的功能模块我们都可以进行拆分!!!


目录
打赏
0
0
0
0
25
分享
相关文章
使用Webpack的module.hot API来定义模块的热替换
使用Webpack的`module.hot` API实现模块热替换,简单示例展示如何在`myModule`变化时执行回调。`module.hot.accept`接收模块路径和回调函数,当模块或其依赖变更时触发回调,用于执行更新逻辑。可通过`module.hot.data`保存和恢复状态以实现热替换时保持应用程序的状态。
深入了解Webpack:模块打包的革命
【10月更文挑战第11天】深入了解Webpack:模块打包的革命
Webpack技术深度解析:模块打包与性能优化
【10月更文挑战第13天】Webpack技术深度解析:模块打包与性能优化
在前端开发中,webpack 作为一个强大的模块打包工具,为我们提供了丰富的功能和扩展性
【9月更文挑战第1天】在前端开发中,Webpack 作为强大的模块打包工具,提供了丰富的功能和扩展性。本文重点介绍 DefinePlugin 插件,详细探讨其原理、功能及实际应用。DefinePlugin 可在编译过程中动态定义全局变量,适用于环境变量配置、动态加载资源、接口地址配置等场景,有助于提升代码质量和开发效率。通过具体配置示例和注意事项,帮助开发者更好地利用此插件优化项目。
114 13
Webpack 模块解析:打包原理、构造形式、扣代码补参数和全局导出
Webpack 模块解析:打包原理、构造形式、扣代码补参数和全局导出
358 1
在前端开发中,webpack 作为模块打包工具,其 DefinePlugin 插件可在编译时动态定义全局变量,支持环境变量定义、配置参数动态化及条件编译等功能。
在前端开发中,webpack 作为模块打包工具,其 DefinePlugin 插件可在编译时动态定义全局变量,支持环境变量定义、配置参数动态化及条件编译等功能。本文阐述 DefinePlugin 的原理、用法及案例,包括安装配置、具体示例(如动态加载资源、配置接口地址)和注意事项,帮助开发者更好地利用此插件优化项目。
220 0
|
8月前
|
Vue 开发中的一些问题简单记录,Cannot find module ‘webpack/lib/RuleSet‘
Vue 开发中的一些问题简单记录,Cannot find module ‘webpack/lib/RuleSet‘
630 1
Webpack模块联邦:微前端架构的新选择
Webpack的模块联邦是Webpack 5引入的革命性特性,革新了微前端架构。它允许独立的Web应用在运行时动态共享代码,无需传统打包过程。基本概念包括容器应用(负责加载协调)和远程应用(独立应用,可暴露模块)。实现步骤涉及容器和远程应用的`ModuleFederationPlugin`配置,以及在应用间导入和使用远程模块。模块联邦的优势在于独立开发、按需加载、版本管理和易于维护。通过实战案例展示了如何构建微前端应用,包括创建容器和远程应用,以及消费远程组件。高级用法涉及动态加载、路由集成、状态管理和错误处理。
159 3
Webpack作为模块打包器,为前端项目提供了高度灵活和可配置的构建流程
【6月更文挑战第12天】本文探讨了优化TypeScript与Webpack构建性能的策略。理解Webpack的解析、构建和生成阶段是关键。优化包括:调整tsconfig.json(如关闭不必要的类型检查)和webpack.config.js选项,启用Webpack缓存,实现增量构建,代码拆分和懒加载。这些方法能提升构建速度,提高开发效率。
72 3
深入了解Webpack:前端模块打包工具
深入了解Webpack:前端模块打包工具
156 1