CommonJS 模块编程(新思路方便复习笔记)

简介: CommonJS 模块编程(新思路方便复习笔记)

CommonJS 模块编程(新思路方便复习笔记)

基本介绍


1 传统非模块化开发有如下的缺点:(1)命名冲突 (2)文件依赖[代码演示]


2 Javascript 代码越来越庞大,Javascript 引入模块化编程,开发者只需要实现核心的业务逻辑,其他都可以加载别人已经写好的模块


3 Javascript 使用"模 块"(module)的概念来实现模块化编程, 解决非模块化编程问题


4 模块化 也是 ES6 的新特性

模块化编程原理示意图

模块化编程分类

  1. CommonJS 模块化规范/ES5 的写法
  2. ES6 模块化规范

CommonJS 模块编程

介绍


1. 每个 js 文件就是一个模块,有自己的作用域。在文件中定义的变量、函数、类/对象,都是私有的,对其他 js 文件不可见


2. CommonJS 使用 module.exports={} / exports={} 导出 模块 , 使用 let/const 名称 =require("xx.js") 导入模块

应用实例

1. 需求说明


1) 编写 functions.js , 该文件有函数,变量, 常量, 对象, 数组。。。


2) 要求在 use.js , 可以使用到 function.js 中定义的 函数/变量/常量/对象


3) 请使用模块化编程的方式完成, 将各种写法都写一下

2. 思路分析/图解

3. 代码实现

创建 function.js


定义对象,变量,常量, 函数


导出解读


1. module.exports 导出模块


2. 把你需要导出的数据, 写入到 {}中即可


3. 可以全部导出,也可以部分导出


4. 理解:相当于把我们导出的数据,当做一个对象


5. 如果属性名和函数/变量/对象..名字相同,可以简写


6. 有些前端, 简写 module.exports={} 成 exports={}

//定义对象,变量,常量, 函数
const sum = function (a, b) {
    return parseInt(a) + parseInt(b);
}
const sub = function (a, b) {
    return parseInt(a) - parseInt(b);
}
let name = "xxxx";
const PI = 3.14;
const monster = {
    name: "牛魔王",
    age: 500,
    hi() {
        console.log("hi 你好 牛魔王");
    }
}
//导出
/*
解读
1. module.exports 导出模块
2. 把你需要导出的数据, 写入到 {}中即可
3. 可以全部导出,也可以部分导出
4. 理解:相当于把我们导出的数据,当做一个对象
5. 如果属性名和函数/变量/对象..名字相同,可以简写
6. 有些前端, 简写 module.exports={} 成 exports={}
 */
exports = {
    sum,
    sub,
    name,
    PI
}
// module.exports = {
//     sum,
//     sub,
//     name,
//     PI
// }
// module.exports = {
//     sum: sum,
//     sub: sub,
//     myname: name,
//     PI: PI
// }
创建use.html

在html文件中要使用js

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>use</title>
    <!--在html文件中要使用js-->
    <script type="text/javascript" src="./function.js"></script>
</head>
<body>
</body>
</html>
创建use.js

导入解读

1. 在es5中, 我们通过 require 就包 对应.js中的数据/对象,引入

2. 我们使用的时候,通过m.属性 就可以使用

3. 如果我们导入时,不需要所有的,可以导入部分数据

使用

说明: 只要这里idea可以识别变量/函数/对象, 说明OK

//导入
//解读
//1. 在es5中, 我们通过 require 就包 对应.js中的
//数据/对象,引入
//2. 我们使用的时候,通过m.属性 就可以使用
//3. 如果我们导入时,不需要所有的,可以导入部分数据
const m = require("./function.js");
const {sub} = require("./function.js");
//使用
//说明: 只要这里idea可以识别变量/函数/对象, 说明OK
console.log(m.sub("100","200"));
console.log(m.sum(10,90));
console.log(m.name)
console.log(m.PI);
console.log(sub(19,8));

4. 要看运行效果,需要 Node 环境, node 环境这里为了简单, 只要 use.js 可以解析 sum 和 sub 说明是正确


目录
相关文章
|
2月前
|
开发者
代码之外:开发者的软技能修炼手册
在软件开发领域,代码只是冰山一角。成为一名优秀的开发者,不仅需要扎实的技术功底,更需具备一系列软技能。本文探讨了沟通能力、时间管理、团队协作、持续学习、解决问题、适应变化、领导力及情绪管理等关键软技能,并提供了实用心得,助力你在开发之路上全面发展。希望你能在这条道路上不仅技术精进,更能成为一名全面发展的优秀开发者。
|
4月前
|
Rust 开发者
揭秘Rust编程:模块与包的终极对决,谁将主宰代码组织的新秩序?
【8月更文挑战第31天】在软件工程中,模块化设计能显著提升代码的可读性、可维护性和可重用性。Rust 作为现代系统编程语言,其模块和包管理机制为开发者提供了强有力的工具来组织代码。本文通过对比模块和包的概念及使用场景,探讨了 Rust 中的最佳实践。
43 2
|
4月前
|
Rust 安全 Java
神秘编程世界惊现独特规则,Rust 核心特性究竟隐藏着怎样的秘密?快来一探究竟!
【8月更文挑战第31天】在编程领域,Rust 以所有权、借用和生命周期等核心特性著称,提供强大的内存安全保障。所有权确保每个值有唯一所有者并自动管理内存,避免手动管理内存带来的问题。借用则允许临时访问值而不转移所有权,确保内存安全访问。生命周期机制在编译时保证引用的有效性,无需运行时检查。通过对比 Rust 与 C/C++ 的示例,可以更清晰地理解这些特性带来的优势。
40 1
|
4月前
|
自然语言处理 前端开发 JavaScript
前端进阶必读:JS闭包深度解析,掌握这一特性,你的代码将焕然一新!
【8月更文挑战第23天】闭包是JavaScript的一项高级功能,让函数能够访问和操作外部函数作用域中的变量。本文深入解析闭包概念、组成及应用场景。闭包由函数及其词法环境构成,通过在一个函数内定义另一个函数来创建。它有助于封装私有变量、维持状态和动态生成函数。然而,不当使用闭包可能导致内存泄漏或性能问题。掌握闭包对于实现模块化代码和成为优秀前端开发者至关重要。
44 0
|
7月前
|
安全 网络安全 网络架构
网络开发过程详细知识点
网络开发过程详细知识点
64 0
|
XML IDE 编译器
【C++】C++ 基础进阶【二】开发技巧
C++基础进阶,关于开发环境开发工具的一些便捷使用方式,提高生产力
171 0
【C++】C++ 基础进阶【二】开发技巧
|
JavaScript
JS之用面向对象和传统过程式编程
改写成面向对象时,可先将普通函数变型,再改成面向对象。 普通方法变型 普通方法变型,变型有3个原则 1)尽量不要出现函数嵌套函数 2)可以用全局变量 3)把onload中不是赋值的语句放到单独函数中 如下代码中,完成了普通函数的变型。
104 0
JS之用面向对象和传统过程式编程
|
JavaScript 前端开发 开发者
快速了解ES6模块化少不了这篇文章
在之前的JavaScript中是没有模块化概念的,无法将一个大程序拆分成互相依赖的小文件,再用简单的方法拼装起来。如果要进行模块化操作,就需要引入第三方的类库。随着技术的发展,前后端分离,前端的业务变的越来越复杂化,于是才有了ES6模块化的诞生。 为什么要有模块化,或者模块化的好处是什么呢?
|
JavaScript 前端开发 图形学
速学TypeScript-精简划重点手册-第三册
众所周知,人生是一个漫长的流程,不断克服困难,不断反思前进的过程。在这个过程中会产生很多对于人生的质疑和思考,于是我决定将自己的思考,经验和故事全部分享出来,以此寻找共鸣!!!
143 0
|
JavaScript Java C#
速学TypeScript-精简划重点手册-第五册
众所周知,人生是一个漫长的流程,不断克服困难,不断反思前进的过程。在这个过程中会产生很多对于人生的质疑和思考,于是我决定将自己的思考,经验和故事全部分享出来,以此寻找共鸣!!!
175 0