CommonJS 的实现原理】的更多相关文章

就在这个周末,npm 超过了 cpan ,成为地球上最大的软件模块仓库. npm 的模块都是 JavaScript 语言写的,但浏览器用不了,因为不支持 CommonJS 格式.要想让浏览器用上这些模块,必须转换格式. 本文介绍浏览器加载 CommonJS 的原理,并且给出一种非常简单的实现. 一.原理 浏览器不兼容CommonJS的根本原因,在于缺少四个Node.js环境的变量. module exports require global 只要能够提供这四个变量,浏览器就能加载 CommonJ…
就在这个周末,npm 超过了 cpan ,成为地球上最大的软件模块仓库. npm 的模块都是 JavaScript 语言写的,但浏览器用不了,因为不支持 CommonJS 格式.要想让浏览器用上这些模块,必须转换格式. 本文介绍浏览器加载 CommonJS 的原理,并且给出一种非常简单的实现. 一.原理 浏览器不兼容CommonJS的根本原因,在于缺少四个Node.js环境的变量. module exports require global 只要能够提供这四个变量,浏览器就能加载 CommonJ…
其实刚看到这个题目的时候,我的内心是拒绝的,但是本着对科学的敬畏精神,我开始了 CommonJs 的探索之路. 来来来奉上我这几天的心血,拿走不客气.如有错误欢迎指正,共同进步. 提到CommonJs 绕不开的就是模块化. 模块化 模块化是指将一个复杂的系统分解为多个模块以方便编码. 很久以前,开发网页要通过命名空间的方式来组织代码,例如 jQuery 库将它的 API 都放在了 window.$ 下,在加载完 jQuery 后,其他模块再通过 window.$ 去使用 jQuery.这样做有很…
CommonJS 使用 Node.js 的四个环境变量moduleexportsrequireglobal 只要能够提供这四个变量,浏览器就能加载 CommonJS 模块. Browserify 是目前最常用的 CommonJS 格式转换的工具. Browserify:http://browserify.org/ 使用下面的命令,就能将main.js转为浏览器可用的格式.$ browserify main.js > compiled.js…
打包工具就是负责把一些分散的小模块,按照一定的规则整合成一个大模块的工具.与此同时,打包工具也会处理好模块之间的依赖关系,最终这个大模块将可以被运行在合适的平台中. 打包工具会从一个入口文件开始,分析它里面的依赖,并且再进一步地分析依赖中的依赖,不断重复这个过程,直到把这些依赖关系理清挑明为止. 从上面的描述可以看到,打包工具最核心的部分,其实就是处理好模块之间的依赖关系. 为了简单起见,minipack项目直接使用ES modules规范,接下来我们新建三个文件,并且为它们之间建立依赖: /*…
JS模块化的基本原理 commonjs规范 commonjs在前端模块化中的基本使用 AMD与CMD规范剖析博客链接 一.JS模块化基本原理 在JS没有提出来模块化的时候,开发JS项目比较简单,同时也比较杂乱,第一个问题就是全局变量的管理,为了解决这个问题基本上都使用了命名空间和闭包两个主流的解决方式,但是随着硬件基础和网络环境的改善,前端开发也越来越复杂,需要协同合作,代码复用的需求越来越多,复杂性带来的第一个问题就是命名管理问题再次遇到挑战,然后就是协同开发也被正式提上了议题,模块化正式走入…
原文链接:https://www.jianshu.com/p/33d53cce8237 原文系列2链接:https://www.jianshu.com/p/ad427d8879cb 前端完全手册: https://leohxj.gitbooks.io/front-end-database/content/javascript-oop/encapsulation.html 本文参考 Javascript模块化编程(一):模块的写法 Javascript模块化编程(二):AMD规范 Javascri…
大括号 特点:大括号(单独的大括号或者if等后的大括号)内是一个单独的作用域 注意点:在块级作用域内声明的函数,类似var,会被提升到大括号外,应避免在块级作用域内声明函数.如果确实需要,写成函数表达式. { let f = function () { // }; } 利用:代替立即执行函数. 扩展:立即执行函数(IIFE)常用于封装第三方库或者独立的功能模块,函数内定义的所有变量都是局部变量,避免了变量污染(命名冲突),不会污染全局空间.建议在自己写的立即执行函数前加分号,像下面这个会报错.…
前端模块化 前端早期写代码都是全局变量满天飞,这种情况会造成全局命名空间污染,变量冲突等问题 var a = 1; var b = 2; function c(){} function d(){} 后来采用了 js 的对象写法,添加一个单独的命名空间 var space = { a: 1, b: 2, c: function () { console.log('我是c'); return this.a; }, d: function () { console.log('我是d'); return…
JavaScript 模块化简述 前言 关于模块化,最直接的表现就是我们写的 require 和 import 关键字,如果查阅相关资料,就一定会遇到 CommonJS .CMD AMD 这些名词,以及 RequireJS.SeaJS 等陌生框架.比如 SeaJS 的官网 这样描述自己: “简单友好的模块定义规范,Sea.js 遵循 CMD 规范.自然直观的代码组织方式,依赖的自动加载……” 作为前端新手,我表示实在是一脸懵逼,理解不能.按照我一贯的风格,介绍一个东西之前总得解释一下为什么需要这…