js模块化开发

前端模块化

坚强是说给别人听的谎言 提交于 2020-01-04 00:50:24
前端模块化 在JavaScript发展初期就是为了实现简单的页面交互逻辑,寥寥数语即可;如今CPU、浏览器性能得到了极大的提升,很多页面逻辑迁移到了客户端(表单验证等),随着web2.0时代的到来,Ajax技术得到广泛应用,jQuery等前端库层出不穷,前端代码日益膨胀 这时候JavaScript作为嵌入式的脚本语言的定位动摇了,JavaScript却没有为组织代码提供任何明显帮助,甚至没有类的概念,更不用说模块(module)了,JavaScript极其简单的代码组织规范不足以驾驭如此庞大规模的代码 模块 既然JavaScript不能handle如此大规模的代码,我们可以借鉴一下其它语言是怎么处理大规模程序设计的,在Java中有一个重要带概念—— package ,逻辑上相关的代码组织到同一个包内,包内是一个相对独立的王国,不用担心命名冲突什么的,那么外部如果使用呢?直接 import 对应的package即可 import java.util.ArrayList; 遗憾的是JavaScript在设计时定位原因,没有提供类似的功能,开发者需要模拟出类似的功能,来隔离、组织复杂的JavaScript代码,我们称为模块化。 一个模块就是实现特定功能的文件,有了模块,我们就可以更方便地使用别人的代码,想要什么功能,就加载什么模块。模块开发需要遵循一定的规范,各行其是就都乱套了

前端模块化

ぐ巨炮叔叔 提交于 2020-01-04 00:50:16
前端模块化 在JavaScript发展初期就是为了实现简单的页面交互逻辑,寥寥数语即可;如今CPU、浏览器性能得到了极大的提升,很多页面逻辑迁移到了客户端(表单验证等),随着web2.0时代的到来,Ajax技术得到广泛应用,jQuery等前端库层出不穷,前端代码日益膨胀 这时候JavaScript作为嵌入式的脚本语言的定位动摇了,JavaScript却没有为组织代码提供任何明显帮助,甚至没有类的概念,更不用说模块(module)了,JavaScript极其简单的代码组织规范不足以驾驭如此庞大规模的代码 模块 既然JavaScript不能handle如此大规模的代码,我们可以借鉴一下其它语言是怎么处理大规模程序设计的,在Java中有一个重要带概念—— package ,逻辑上相关的代码组织到同一个包内,包内是一个相对独立的王国,不用担心命名冲突什么的,那么外部如果使用呢?直接 import 对应的package即可 import java.util.ArrayList; 遗憾的是JavaScript在设计时定位原因,没有提供类似的功能,开发者需要模拟出类似的功能,来隔离、组织复杂的JavaScript代码,我们称为模块化。 一个模块就是实现特定功能的文件,有了模块,我们就可以更方便地使用别人的代码,想要什么功能,就加载什么模块。模块开发需要遵循一定的规范,各行其是就都乱套了

前端模块化开发

夙愿已清 提交于 2020-01-04 00:49:44
前端模块化 在JavaScript发展初期就是为了实现简单的页面交互逻辑,寥寥数语即可;如今CPU、浏览器性能得到了极大的提升,很多页面逻辑迁移到了客户端(表单验证等),随着web2.0时代的到来,Ajax技术得到广泛应用,jQuery等前端库层出不穷,前端代码日益膨胀 这时候JavaScript作为嵌入式的脚本语言的定位动摇了,JavaScript却没有为组织代码提供任何明显帮助,甚至没有类的概念,更不用说模块(module)了,JavaScript极其简单的代码组织规范不足以驾驭如此庞大规模的代码 模块 既然JavaScript不能handle如此大规模的代码,我们可以借鉴一下其它语言是怎么处理大规模程序设计的,在Java中有一个重要带概念—— package ,逻辑上相关的代码组织到同一个包内,包内是一个相对独立的王国,不用担心命名冲突什么的,那么外部如果使用呢?直接 import 对应的package即可 import java.util.ArrayList; 遗憾的是JavaScript在设计时定位原因,没有提供类似的功能,开发者需要模拟出类似的功能,来隔离、组织复杂的JavaScript代码,我们称为模块化。 一个模块就是实现特定功能的文件,有了模块,我们就可以更方便地使用别人的代码,想要什么功能,就加载什么模块。模块开发需要遵循一定的规范,各行其是就都乱套了

关于模块化开发的那些事儿

痴心易碎 提交于 2020-01-04 00:49:29
一、什么是模块化开发   一个 模块就是一个实现特定功能的文件,有了模块我们就可以更方便的使用别人的代码,要用什么模块就加载什么模块   好处:     1、避免变量污染,命名冲突     2、提高代码的复用性     3、提高维护性     4、依赖关系的管理 二、commonJS   commonJS由nodeJS发扬光大,这标志着js模块化正式登场   1、定义模块     根据commonJS规范,一个单独的文件是一个模块,每一个模块都是一个单独的作用域,也就是说,在该模块内部定义的变量,无法被其他模块读取,除非为global对象的属性。      2、模块输出     模块只有一个出口,module.exports对象。 我们需要把模块希望输出的内容放入该对象。   3、加载模块   加载模块用require方法,该方法读取一个文件并且执行,返回文件内部的module.exports对象 var name = 'Byron'; function printName(){ console.log(name); } function printFullName(firstName){ console.log(firstName + name); } module.exports = { printName: printName, printFullName:

JavaScript的模块化之AMD&CMD规范

拥有回忆 提交于 2020-01-04 00:47:36
前端开发常常会遇到的问题:   1.恼人的命名冲突;   2.繁琐的文件依赖; 模块化开发的优势:   1.解决命名冲突和依赖管理;   2.模块的版本管理;   3.提高代码的可维护性;   4.前端性能优化; JavaScript本身不具备模块化的功能,开发人员为了更好的开发,需要人为的制定一套规范标准,约定一套固定的写法来实现JavaScript模块化功能。 一个模块化系统所必须的能力:  定义封装的模块  定义新模块对其他模块的依赖  可对其他模块的引入支持 AMD&CMD AMD AMD(Asynchronous Module Definition)异步模块定义: 是 RequireJS 在推广过程中对模块定义的规范化产出。 requireJS主要解决两个问题 多个js文件可能有依赖关系,被依赖的文件需要早于依赖它的文件加载到浏览器 js加载的时候浏览器会停止页面渲染,加载文件越多,页面失去响应时间越长 requireJS定义了一个函数 define,它是全局变量,用来定义模块 define(id?, dependencies?, factory); id:可选参数,用来定义模块的标识,如果没有提供该参数,脚本文件名(去掉拓展名) dependencies:是一个当前模块依赖的模块名称数组 factory:工厂方法,模块初始化要执行的函数或对象。如果为函数

前端模块化,AMD和CMD的区别

半城伤御伤魂 提交于 2020-01-04 00:46:42
最近在研究cmd和amd,在网上看到一篇不错的文章,分享出来给大家一起看看。 在JavaScript发展初期就是为了实现简单的页面交互逻辑,寥寥数语即可;如今CPU、浏览器性能得到了极大的提升,很多页面逻辑迁移到了客户端(表单验证等),随着web2.0时代的到来,Ajax技术得到广泛应用,jQuery等前端库层出不穷,前端代码日益膨胀 这时候JavaScript作为嵌入式的脚本语言的定位动摇了,JavaScript却没有为组织代码提供任何明显帮助,甚至没有类的概念,更不用说模块(module)了,JavaScript极其简单的代码组织规范不足以驾驭如此庞大规模的代码 模块 既然JavaScript不能handle如此大规模的代码,我们可以借鉴一下其它语言是怎么处理大规模程序设计的,在Java中有一个重要带概念——package,逻辑上相关的代码组织到同一个包内,包内是一个相对独立的王国,不用担心命名冲突什么的,那么外部如果使用呢?直接import对应的package即可 import java.util.ArrayList; 遗憾的是JavaScript在设计时定位原因,没有提供类似的功能,开发者需要模拟出类似的功能,来隔离、组织复杂的JavaScript代码,我们称为模块化。 一个模块就是实现特定功能的文件,有了模块,我们就可以更方便地使用别人的代码,想要什么功能,就加载什么模块

前端工程化

馋奶兔 提交于 2020-01-04 00:25:23
前端架构: 1.前端工程化 web应用复杂度的增加,特别是单页面应用的风靡。组件化,工程化,自动化成了前端发展的趋势。或者说一线的互联网公司就是这么做的。 每个前端团队都在打造自己的前端开发体系,这通常是一个东拼西凑,逐渐磨合的过程,在技术发展日新月异的今天,这样的过程真的是不可抽象和复制的么?本文希望能够通过系统的拆解前端开发体系为大家提供体系设计思路参考。 前端工程的3个阶段 第一阶段: 库/框架选型 Animate.css jQuery vue.js underscore.js React.js Backbone.js Bootstarp zepto.js jade normalize.css compass Angular.js 解决开发效率 第二阶段: 简单构建优化 选择构建工具,对代码进行压缩,校验,之后再以页面为单位进行简单的资源合并。 第三阶段: JS/CSS模块化开发 解决维护效率 js的模块化方案 ADM/CDM/UMD/ES6 Module css的模块化:less,sass。 第四阶段: 前端是一个技术问题较少,工程问题较多的开发领域 当我们要开发一款完整的Web应用时,前端将面临更多的工程问题,比如: - 大体量:多功能、多页面、多状态、多系统; - 大规模:多人甚至多团队合作开发; - 高性能:CDN部署、缓存控制、文件指纹、缓存复用、请求合并、按需加载

ES6之模块化导入导出

主宰稳场 提交于 2019-12-27 05:42:20
1、概述 在js的历史上一直没有模块(module)体系,无法将一个大程序拆分成相互依赖的小文件,再用简单的方法拼装起来,这对开发大型的、复杂的项目形成了巨大障碍。 在 ES6 之前,社区制定了一些模块加载方案,最主要的有 CommonJS 和 AMD 两种。前者用于服务器,后者用于浏览器。ES6 在语言标准的层面上,实现了模块功能, 而且实现得相当简单,完全可以取代 CommonJS 和 AMD 规范,成为浏览器和服务器通用的模块解决方案。 2、ES6 模块(module)的设计思想是什么? 那就是尽量的静态化,使得编译时就能确定依赖关系 3、CommonJS模块 和 ES6 模块比较 看两段代码 // 导出 node 文件系统的几个方法 let {stat,exists,readFile} = require('fs');注意:这段代码实际上是加载了整个 fs 模块。这种加载方式称为“运行时加载”,因为只有运行时才能得到这个对象。导致完全没办法在编译时做“静态优化”。 // ES6 模块 import {stat,exists,readFile} from 'fs'注意:这段代码只导出了三个方法,其他的方法没有加载。这种方式称为“编译时加载”,ES6可以在编译时就完成模块加载,效率要比CommonJS模块的加载方式高。   4、模块功能命令之 export 和 import。

Node基础-CommonJS模块化规范

五迷三道 提交于 2019-12-21 09:07:54
1.在本地项目中基于NPM/YARN安装第三方模块 第一步:在本地项目中创建一个“package.json”的文件 作用:把当前项目所有依赖的第三方模块信息(包含:模块名称以及版本号等信息)都记录下来;可以在这里配置一些可执行的命令脚本等; 基于YARN会默认生成一个“配置清单”,只是信息没有手动创建的全面 npm init -y 或者 yarn init -y 创建配置清单的时候,项目目录中不应该出现中文和特殊符号,这样有可能识别不了 第二步:安装 开发依赖:只有在项目开发阶段依赖的第三方模块 生产依赖:项目部署实施的时候,也需要依赖的第三方模块 [npm] npm install xxx --save 保存到配置清单的生产依赖中 --save-dev 保存到开发依赖中 [yarn] yarn add xxx 默认就是保存到生产依赖中 --dev / -D 保存到开发依赖中 第三步:部署的时候“跑环境” 不要自己一个个的安装,只需要执行 npm install 或者 yarn install 即可,npm会自己先检测目录中是否有package.json文件,如果有的话,会按照文件中的配置清单依次安装 =>开发一个项目,我们生成一个配置清单“package.json”,当我们安装第三方模块使用的时候,把安装的模块信息记录到配置清单中,这样以后不管是团队协作开发还是项目部署上线

nodeJS之模块化开发

血红的双手。 提交于 2019-12-15 17:13:51
模块化 基本概念 在nodejs中,应用由模块组成,nodejs中采用commonJS模块规范。 一个js文件就是一个模块 每个模块都是一个独立的作用域,在这个而文件中定义的变量、函数、对象都是私有的,对其他文件不可见。 01-模块化的概念 用于演示每一个模块都有自己单独的作用域 node中模块分类 1 核心模块 由 node 本身提供,不需要单独安装(npm),可直接引入使用 2 第三方模块 由社区或个人提供,需要通过npm安装后使用 3 自定义模块 由我们自己创建,比如:tool.js 、 user.js 核心模块 fs:文件操作模块 http:网络操作模块 path:路径操作模块 url: 解析地址的模块 querystring: 解析参数字符串的模块 基本使用:1 先引入 2 再使用 // 引入模块 var fs = require ( 'fs' ) ; 第三方模块 第三方模块是由 社区或个人 提供的 比如:mime模块/art-template/jquery… 基本使用:1 先通过npm下载 2 再引入 3 最后使用 用户自定义模块 由开发人员创建的模块(JS文件) 基本使用:1 创建模块 2 引入模块 注意:自定义模块的路径必须以 ./ 获取 ../ 开头 // 加载模块 require ( './a' ) // 推荐使用,省略.js后缀! require ( './a