模块化:CommonJS规范

news/2024/5/3 9:40:29/文章来源:https://blog.csdn.net/weixin_43524214/article/details/127142357

目录

CommonJS规范

模块使用环境区分

核心语法

如何使用

CommonJS:服务器端使用

CommonJS:浏览器端使用


CommonJS规范

模块使用环境区分

        CommonJS规范中,每一个JS文件都可以作为一个模块。模块的引入,主要区分两个环境:

【1】服务器端环境(Node.js):程序运行期间,模块是同步加载的,可能会导致响应时间较长;

【2】浏览器端环境(Browserify):由于CommonJS中存在require语法,浏览器无法识别,因此程序运行期间,模块需要借助Browserify提前做编译打包处理之后才能使用。

核心语法

        CommonJS规范的核心语法如下,

【1】暴露模块:module.exports = value;exports.xxx = value;--->暴露模块的本质是:exports对象
【2】引入模块[自定义模块-指定相对路径|第三方模块-指定包名即可]:require(xxx);

如何使用

【1】服务器端环境下(Node.js):可以直接使用这种CommonJS模块。Node.js官网:Node.js 中文网。

【2】浏览器端环境下(Browserify):需要借助Browserify提前将CommonJS规范的模块编译打包,转换为浏览器端支持的模块之后,才能引入使用。Browserify官网地址:Browserify。

 

CommonJS:服务器端使用

        ①创建项目,项目结构如下,

 

        ②引入browserify,

npm install -g browserify

 

 

        ③安装uniq依赖,作用:去除数组中的重复元素。

npm install uniq

        ④定义子模块module,

 

        ⑤主模块引入子模块module、第三方模块uniq;

//主模块中引入子模块
const module1 = require(`./modules/module1`);
const module2 = require(`./modules/module2`);
const module3 = require(`./modules/module3`);
//引入第三方模块
const uniq = require('uniq');
​
const arr = [1,2,2,3,5,5,6,8,99,99,100];
​
const result = uniq(arr);
​
console.log(result);
​
module1.foo();//导出类型-Object对象
​
module2();//导出类型-function
​
module3.bar();//导出类型-Object对象
 

         ⑥运行主模块:node app.js,

CommonJS:浏览器端使用

        ①新建项目,整体结构如下,app.js、modulex.js子模块内容和前面的保持一致。

        ②安装Browserify第三方库,用于实现CommonJS的预先编译打包处理,使其可以在浏览器端环境中使用,

# 全局安装
npm install -g browserify  
# 局部安装 -dev表示开发环境依赖,只在开发环境下使用,用于编译打包;默认不带-dev,表示是生产环境依赖
npm install browserify --save-dev  

        ③编译打包CommonJS模块,原因是:直接在index.html引入app.js,在浏览器环境下运行,是无法识别require语法的,直接报错。

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>index</title><script src="js/src/app.js"></script>
</head>
<body>
</body>
</html>

 

        前面我们已经安装过browserify.js第三方库了,编译打包的命令如下,-o表示指定输出路径,

browserify js/src/app.js -o js/dist/bundle.js

 

        让我们来查看一下打包之后的bundle.js文件的内容,大致是将CommonJS规范的脚本转换为了浏览器端可以解析的JS脚本。

 

        ④在index.html中引入编译打包之后的bundle.js文件,再次运行,即可正常解析。

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>index</title><script src="js/dist/bundle.js"></script>
</head>
<body>
​
</body>
</html>

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_206623.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于Java后台(Springboot框架)+前端小程序(MINA框架)+Mysql数据库的医院预约挂号小程序系统设计与实现

项目背景和意义 目的&#xff1a;本课题主要目标是设计并能够实现一个基于微信小程序医院预约挂号系统&#xff0c;前台用户使用小程序&#xff0c;后台管理使用基JavaMySql技术&#xff1b;通过后台设置医院信息、录入医院科室信息、录入医生信息、设置医生排班信息、查看预约…

(附源码)计算机毕业设计SSM毕业设计管理系统

毕设帮助&#xff0c;指导&#xff0c;本源码分享&#xff0c;调试部署(见文末) 3.3功能需求分析 本系统采用从上往下的步骤开发&#xff0c;基本功能如下&#xff1a; 本课题要求实现一套毕业设计管理系统&#xff0c;系统主要包括&#xff08;管理员&#xff0c;教师和学生&a…

python-pyecharts基础知识

资料来源&#xff1a;2022新版黑马程序员python教程&#xff0c;8天python从入门到精通&#xff0c;学python看这套就够了_哔哩哔哩_bilibili 折线图 地图 动态GDP增长图 补充知识&#xff1a; json 1&#xff09;JSON是一种轻量级的数据交互格式。可以按照JSON指定的格式去…

群晖Docker套件注册Harbor私有镜像仓库,并下载运行自己发布的Docker镜像

[群晖Docker套件注册Harbor私有镜像仓库&#xff0c;并下载运行自己发布的Docker镜像] 在进行微服务开发时&#xff0c;一些基础服务组件&#xff08;Nacos、Redis、Mysql&#xff09;的运行以及越来越多的业务服务组件的开发&#xff0c;会导致开发者电脑的内存资源紧张&#…

Android:玩转Jetpack Compose之MVI架构——基类中使用页面UiState

系列文章目录 架构一&#xff08;MVP&#xff09;&#xff1a;Android:玩转RetrofitOkHttpKotlin协程 网络请求架构 架构二&#xff08;MVVM&#xff09;&#xff1a;Android:玩转网络请求架构 RetrofitKotlin协程简单使用(MVVM架构模式) 架构三&#xff08;MVI&#xff09;&a…

吴恩达machine-learning-specialization2022第1周的optional lab

1. 使用python和numpy实现一个线性回归 要求使用梯度下降法&#xff0c;可视化losslossloss随着迭代次数的变化曲线 2. 说明 2.1 拟合函数 fw,b(x(i))wx(i)bf_{w,b}(x^{(i)})wx^{(i)}bfw,b​(x(i))wx(i)b 2.2 均方误差损失函数 J(w,b)12m∑i0m−1(fw,b(x(i))−y(i))2J(w,b)…

【云原生丨Kubernetes系列15】创建 ConfigMap 资源对象

前言 前⾯我们深入学习了 Servie 的使⽤&#xff0c; Service 是 Kubernetes 系统中⾮常重要的⼀个核⼼概念&#xff0c;这节课我们来学习另外⼀个⾮常重要的资源对象&#xff1a; ConfigMap 文章目录前言引入创建引入 应用部署的一个最佳实践是将应用所需的配置信息与程序进行…

【ML13】overfitting and underfitting 过拟合与欠拟合

过拟合与欠拟合过拟合与欠拟合概念过拟合解决办法解决办法一&#xff1a;在训练集中加入更多数据解决办法二&#xff1a;优化数据集 feature selection解决方法三&#xff1a;正则化 Regularization正则化线性回归Recape of Cost Function of Linear RegressionAdd the regular…

算法刷题:可交换的连续最大和

目录前言1. 题目描述2. 题目分析3. 代码实现4. 运行测试后记前言 好久没有做题了&#xff0c;前两天做了一道题&#xff0c;感觉还比较有意思&#xff0c;来分享一下。想学习&#xff0c;但是自己实在是懒&#xff0c;懒癌怎么治&#xff1f;期待着自己彻底奋发图强那一天。 …

【Ubuntu】常用软件下载与安装汇总

前言 发现很多诸如Detectron2的开源项目官方仅提供Liunx系统的安装方式&#xff0c;于是愤而将工作机系统换成了Ubuntu20.04&#xff0c;下面记录一些常用软件的安装方式&#xff0c;以便再次换机时能快速迁移&#xff0c;后续装新的软件会持续更新。 安装yum 直接安装会报错…

潜伏在ISP网络中数月的新黑客组织“Metador”

研究人员称之为“Metador”的一个以前未知的威胁因素已经入侵电信、互联网服务提供商(ISP)和大学大约两年了。 Metador的目标是中东和非洲的组织&#xff0c;他们的目的似乎是长期坚持间谍活动。该组织使用了两种基于Windows的恶意软件&#xff0c;它们被描述为“极其复杂”&a…

JavaScript:BOM

目录 一、BOM介绍 1、BOM的构成 二、window对象常用方法 1、窗口加载事件 2、window.onresize 3、confirm()方法 4、open()方法 5、setTimeout()定时器 6、this的使用 7、JS是单线程 8、JS执行机制 9、URL 10、location对象的属性 11、document对象 12、Date对象…

(附源码)计算机毕业设计ssm办公自动化系统

毕设帮助&#xff0c;指导&#xff0c;本源码分享&#xff0c;调试部署(见文末) 3.3系统流程和逻辑 系统业务流程图&#xff0c;如图所示&#xff1a; 图3-1登录流程图 图3-2添加信息流程图 图3-3注册信息流程图 4.1 概述 办公自动化系统基于Web服务模式&#xff0c;是一个适…

实训十七:交换机单端口环路检测配置

一、实验目的 1、了解单端口环路检测的作用 2、熟悉单端口环路检测的配置 二、 应用环境 1、针对网络中存在用户自行架设的 HUB 设备可能导致的环路&#xff0c;在交换机设备上运行单端 口环路检测以防止由于 HUB 连线失误导致的网络环路。 三、 实验设备 1、 DCN-CS6200 …

【CH559L单片机】串口下载程序说明

【CH559L单片机】串口下载程序说明&#x1f4cc;关篇《【硬件开源电路】CH559L开发板和CH55x_DAP-Link二合一开发板分享》 &#x1f4e2;CH559L单片机想通过串口来实现程序的烧录&#xff0c;折腾了我2天了&#xff0c;一直是失败&#xff0c;没有成功过一次&#xff0c;昨天跑…

【CSS3】 平面转换 空间转换 动画

目录平面转换平移缩放倾斜旋转transform复合属性空间转换空间位移空间旋转呈现立体图形空间缩放动画动画属性steps逐帧动画多组动画平面转换 CSS3中动画效果包括3个部分&#xff1a;过渡&#xff08;transition&#xff09;、变形&#xff08;transform&#xff09;、动画&…

如何使用 SAP UI5 V2 ODataModel 模型 API 实现 deepCreate 的场景以及局限性

如果开发人员期望在持久化时请求已创建条目的导航属性(navigation property)&#xff0c;请使用可选的 expand 参数在与实体创建的 POST 请求相同的批处理请求中有效地执行此操作。 可选的 inactive 参数确定是否创建非活动 transient 上下文。 这样的上下文只会在属性更新时成…

Jaca集合(四)Vector集合底层源码分析

Vector的基本介绍&#xff1a; &#xff08;1&#xff09;Vector类的定义说明&#xff1a;我们进入源码界面进行查看&#xff1a; public class Vector<E>extends AbstractList<E>implements List<E>, RandomAccess, Cloneable, java.io.Serializable &#…

Qt之事件处理机制

目录 一、事件简介 二、事件的处理 1.重写notify处理函数 2.事件过滤器 3.重写event处理函数 4.重写特定事件处理函数 三、事件的发送 一、事件简介 Qt 是一个基于 C 的框架&#xff0c;主要用来开发带窗口的应用程序。使用的基于窗口的应用程序都是基于事件&#xff0c…

网课查题公众号题库接口

网课查题公众号题库接口 本平台优点&#xff1a; 多题库查题、独立后台、响应速度快、全网平台可查、功能最全&#xff01; 1.想要给自己的公众号获得查题接口&#xff0c;只需要两步&#xff01; 2.题库&#xff1a; 题库&#xff1a;题库后台&#xff08;点击跳转&#xf…