模块化

JavaScript模块化-CommonJS、AMD、CMD、UMD、ES6

杀马特。学长 韩版系。学妹 提交于 2020-04-06 11:06:05
前言:模块化开发需求 在JS早期,使用script标签引入JS,会造成以下问题: 加载的时候阻塞网页渲染,引入JS越多,阻塞时间越长。 容易污染全局变量。 js文件存在依赖关系,加载必须有顺序。项目较大时,依赖会错综复杂。 引入的JS文件过多,不美观,且不易于管理。 一、CommonJS规范 CommonJS Modules/1.0规范,服务器端规范。 Node.js推广使用。该规范的核心是:允许模块使用require方法来同步加载所依赖的其他模块,然后通过exports或module.exports导出需要暴露的接口。 特点: 一个模块是一个文件 使用module.exports或exports导出模块 // module.js exports.add = (a, b) => a+b module.exports = { add: (a, b) => a + b } 使用require加载模块 a. require命令第一次加载模块时,执行整个脚本,在内存中生成对象 b. 多次执行require命令再次加载该模块时,不会再执行该脚本,直接从缓存中取值 c. CommonJS加载模块是同步加载模块 Tips: 为什么CommonJS规范不适合作为浏览器的规范 由于CommonJS是同步加模块,在服务端加载模块时都是从本地硬盘中加载,读取速度很快。但是在浏览器端加载模块时

前端工程化

僤鯓⒐⒋嵵緔 提交于 2020-04-05 19:03:58
第一章:模块化开发 1.1-模块化概述 1.1.1-为什么需要模块化 传统开发模式的主要问题: 命名冲突 文件依赖 通过模块化解决上述问题: 模块化就是把单独的一个功能封装到一个模块中(文件中),模块化之间互相隔离(高内聚,低耦合),但是可以通过特定的接口公开内部成员(导出),也可依赖别的模块(导入)。 模块化开发的好处,方便代码的重用,提高开发效率,并且便于后期维护。 1.1.2-模块化相关规范 浏览器端模块化规范 AMD,典型代表 Require.js CMD,典型代表 Seajs 在本篇文章中,不做过多解释,因为这两种浏览器端模块化规范已经过时。 服务器端(node)模块化规范 CommonJs规范,在node环境中使用。典型规范定义如下: 模块分为 单文件 与 包 模块成员导出: module.exports 或 exports 模块成员导入: require('模块标识符') ES6模块化规范 ES6模块化规范,是大一统的规范。 在ES6模块化未出现之前,JavaScript社区已经尝试并提出了AMD、CMD、CommonJs等模块规范。 但是这些模块化规范的标准还存在一定的差异性、局限性,并不是浏览器与服务器通用的标准规范。例如: AMD和CMD仅适用于浏览器端模块化规范 CommonJS仅适用于服务器端Node环境 因此,ES6在语言层面上定义了ES6模块化规范

require.js Javascript模块化

让人想犯罪 __ 提交于 2020-04-04 09:02:46
浏览器端的模块,不能采用"同步加载"(synchronous),只能采用"异步加载"(asynchronous)。这就是AMD规范诞生的背景。 AMD 是"Asynchronous Module Definition"的缩写,意思就是"异步模块定义"。 它采用异步方式加载模块,模块的加载不影响它后面语句的运行。 所有依赖这个模块的语句,都定义在一个回调函数中,等到加载完成之后,这个回调函数才会运行。 目前,主要有两个Javascript库实现了AMD规范: require.js 和 curl.js require.js 的使用 <script src="js/require.js" data-main="js/main"></script> 参考一个很好的老师,初学require.js链接: http://www.ruanyifeng.com/blog/2012/11/require_js.html 来源: https://www.cnblogs.com/xiangsj/p/6408408.html

从我做起[原生DI实现模块化和批量注入].Net Core 之一

你。 提交于 2020-04-01 09:30:04
实现模块化注册 .Net Core实现模块化批量注入 我将新建一个项目从头开始项目名称Sukt.Core. 该项目分层如下: Sukt.Core.API 为前端提供APi接口(里面尽量不存在业务逻辑,仅能引用应用层,不可跨层引用) Sukt.Core.Application 应用层实现(主要存放业务逻辑,以及数据持久层调用) Sukt.Core.Application.Contracts 应用契约层(存放应用层的接口定义) Sukt.Core.Test 单元测试层 Sukt.Core.Dtos MVVM层,(用于存放与前端交互模型,尽量避免前端直接调用实体模型) Sukt.Core.EntityFrameworkCore 数据持久化层,用来存放调用数据库实现 Sukt.Core.Shared (本层最大,本层可以被任意层引用,本层包括了一些自定义扩展)[基础模块注册放到本层/需要自定义扩展模块需要引用本层的SuktAppModuleBase基础类 ] 基于官方DI实现模块化批量自动注入 阶段一 我们都知道官方的DI没有批量注入;那么我们第一阶段的目标就是来实现这个功能;在实现这个功能前;我们先来讲一下模块化;我们的标题就是实现模块化注册; 我们都知道abp框架他的框架在Startup中有很少的代码;可以说几乎没有;那么他是怎么做到的呢?

node.js 的模块化

五迷三道 提交于 2020-03-30 03:25:37
模块的概念 为了让Node.js的文件可以相互调用,Node.js提供了一个简单的模块加载系统。 在 Node.js 中,文件和模块是一一对应的(每个文件被视为一个独立的模块),换言之,一个 Node.js 文件就是一个模块 模块是Node.js 应用程序的基本组成部分,每个模块都有自己的作用域 在 Node中,模块分为两类 一类是 Node 提供的模块,称为核心模块;另一类是用户编写的模块,称为文件模块。 核心模块部分在 Node 源代码的编译过程中,编译进了二进制执行文件。在 Node 进 程启动时,部分核心模块就被直接加载进内存中,所以这部分核心模块引入时,文件定位和 编译执行这两个步骤可以省略掉,并且在路径分析中优先判断,所以它的加载速度是最快的。 如:HTTP 模块 、URL 模块、Fs模块都是 nodejs 内置的核心模块,可以直接引入使用。 文件模块则是在运行时动态加载,需要完整的路径分析、文件定位、编译执行过程、 速度相比核心模块稍微慢一些,但是用的非常多。这些模块需要我们自己定义。接下来我 们看一下 nodejs 中的自定义模块 当前模块下的内置属性__filename 在node中,这个属性不属于全局的,是数据当前模块的, 每个模块都有这样的一个属性返回当前执行的文件的文件路径 , 该路径是经过解析后的绝对路径 ,在模块中,该路径是模块文件的路径 require

前端工程化及相关技术理解

可紊 提交于 2020-03-27 13:15:22
前端在发展,那不是一点快啊,现在的前端项目不再是拼凑几个html页面和写上一堆Jquery就能完成的,web业务正在变得日益复杂,一个Web App的开发难度,类似于开发一个简易型的native app,随之带来了一系列的问题,如何进行高效的多人开发,如何保证优秀的性能,还有如何减少加班时间等等。 前端工程化的内容有哪些? 模块化 规范化 自动化 组件化 一、模块化 模块化是多人协作的基础。 简单来说,模块化就是将一个大文件拆分成相互依赖的小文件,再进行统一的拼装和加载。只有这样,才有多人协作的可能。 想一想,为什么模块很重要? 因为有了模块,我们就可以更方便地使用别人的代码,想要什么功能,就加载什么模块。 但是,这样做有一个前提,那就是大家必须以同样的方式编写模块,否则你有你的写法,我有我的写法,岂不是乱了套! js的模块化 在es6之前,有commonJS,AMD,CMD规范,现在有es6的模块系统 commonJS规范 根据CommonJS规范,一个单独的文件就是一个模块。每一个模块都是一个单独的作用域,也就是说,在一个文件定义的变量(还包括函数和类),都是私有的,对其他文件是不可见的 而且:CommonJS 加载模块是同步的,所以只有加载完成才能执行后面的操作 服务端NodeJS采用了commonJS规范 AMD规范 服务端模块有了,那么客户端模块呢,

javascript模块化编程规范

一个人想着一个人 提交于 2020-03-26 07:39:10
一、javascript模块化编程规范: 二、关于commenjs规范和AMD规范: 根本不同:前者用于服务器端同步加载模块;后者是客户端异步加载模块。 同点:两者都有一个全局函数require(),用于加载模块;只是AMD规范中的require函数需要有2个参数。 三、 CommonJS 出现时间更早,代表有: Node.js 的 模块系统 ,就是参照 CommonJS 规范实现的。在CommonJS中,有一个全局性方法require(),用于加载模块。假定有一个数学模块math.js,就可以像下面这样加载。 var math = require( 'math'); 然后,就可以调用模块提供的方法: var math = require( 'math'); math.add(2,3); // 5 服务器端模块以后,很自然地,大家就想要客户端模块。而且最好两者能够兼容,一个模块不用修改,在服务器和浏览器都可以运行。 但是,由于一个重大的局限,使得CommonJS规范不适用于浏览器环境。   var math = require('math');   math.add(2, 3); 第二行math.add(2, 3),在第一行require('math')之后运行,必须等math.js加载完成。也就是说,如果加载时间很长,整个应用就会停在那里等。

js 模块化

喜夏-厌秋 提交于 2020-03-26 06:53:58
本文参考以下几篇文章: http://www.ruanyifeng.com/blog/2012/10/javascript_module.html(模块化的写法) http://www.ruanyifeng.com/blog/2012/10/asynchronous_module_definition.html (AMD规范) http://www.ruanyifeng.com/blog/2012/11/require_js.html (requireJS的用法) http://www.ruanyifeng.com/blog/2017/04/memory-leak.html(内存泄漏) 模块化的目的: 1、功能复杂,团队协作开发。互不影响,代码重用 2、不污染全局变量 3、保护自己内部的变量不被修改 4、 来源: https://www.cnblogs.com/aligege/p/7027446.html

JavaScript模块化规范

淺唱寂寞╮ 提交于 2020-03-26 06:53:19
JavaScript模块化规范主要遵循CommonJS和AMD规范。 CommonJS规范 -服务器端JavaScript规范 Node.js是一个服务器端JavaScript项目,采用了CommonJS标准实现其模块系统。 CommonJS中采用一个全局require方法来加载模块,主要由原生模块module来实现和完成,该模块在启动时已经被加载。 模块主要分为两类:原生模块,文件模块。 1.原生模块 原生模块也是Node.js中最核心的模块。原生模块在Node.js源代码编译的时候编译进了二进制执行文件,加载的速度最快。 Node.js中存在许多原生模块,例如:http,net,os,path,fs, module等等,其引用方式为var fs = require('fs'); 2.文件模块 文件模块是动态加载的,加载速度比原生模块慢。但是Node.js对原生模块和文件模块都进行了缓存,在第二次require该模块时,是不会有重复开销。 文件模块可细分为3类。这三类文件模块以文件后缀来区分,Node.js会根据后缀名来决定加载方法。 .js。通过fs模块同步读取js文件并编译执行。 .node。通常为npm安装的第三方模块。 .json。读取文件,调用JSON.parse解析加载。 虽然Node.js使用require方法引入模块的方式看似简单,但内部的加载却并不简单

模块化编程

雨燕双飞 提交于 2020-03-26 06:53:02
AMD: 是"Asynchronous Module Definition"的缩写,意思就是"异步模块定义"。它采用异步方式加载模块,模块的加载不影响它后面语句的运行。所有依赖这个模块的语句,都定义在一个回调函数中,等到加载完成之后,这个回调函数才会运行。 AMD也采用require()语句加载模块,详解参照 http://www.ruanyifeng.com/blog/2012/10/asynchronous_module_definition.html require([module], callback); moudule:代表加载的模块,是一个数组,里面的成员就是要加载的模块 callback: callback则是加载成功之后的回调函数 来源: https://www.cnblogs.com/RAINHAN/p/7041009.html