展开

关键词

CommonJS

老实说,之前我对 CommonJS 也是一无所知,直到不久前 Node.js 火起来,我去研究它,才了解到 Node.js 其实是 CommonJS 的一个部分实现,我才关注起 CommonJS 来。 另一方面,在 2009 年 8 月,CommonJS 诞生了(不妨读读这篇文章)。 从 CommonJS 的官网来看,它至始至终都避免使用 “规范” 这个词,似乎不想自认,但我的理解,CommonJS 本质上就是一个规范,它并不提供默认实现,而是要求一些 JavaScript 库、框架 如果你有兴趣,在这里可以找到 CommonJS 所有的子规范。 按照 CommonJS 小组自己的话来说,在 CommonJS 0.5 版本的开发过程中,已经讨论了 API 需要包含的范围,建立了一个收集提议和优先级信息的 Wiki 页,讨论了现有的提议并排序,达成了基本一致的意见

9710

CommonJS——

CommonJS(http://www.commonjs.org/)规范为JavaScript制定了一个美好的愿景——希望JavaScript能够在任何地方运行。 二、CommonJS出发点 CommonJS规范的提出,主要是为了弥补当前JavaScript没有标准的缺陷,已达到像Python、Ruby和Java具有开发大型应用的基础能力,而不是停留在小脚本程序阶段 (1)服务器端JavaScript应用程序 (2)命令行工具 (3)桌面图形界面应用程序 (4)混合应用 三、CommonJS的模块规范 CommonJS构建模块导出和引入机制使得用户完全不必考虑变量污染 CommonJS对模块的定义主要分为模块引用、模块定义和模块标识3个部分。 1. 模块定义 在CommonJS规范中,使用exports对象用于导出当前模块的方法或者变量,并且它是唯一导出的出口。 Node能以一种较成熟的姿态出现,离不开CommonJS规范的影响。在服务器端,CommonJS能以一种寻常的姿态进入各个公司的项目代码中,离不开Node优异的表现。

36931
  • 广告
    关闭

    开发者专享福利,1988元优惠券限量发放

    带你体验博客、网盘相册搭建部署、视频渲染、模型训练及语音、文字识别等热门场景。云服务器低至65元/年,GPU15元起

  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    CommonJS 详细介绍

    CommonJS 规范与实现 正如当年为了统一 JavaScript 语言标准,人们制定了 ECMAScript 规范一样,如今为了统一 JavaScript 在浏览器之外的实现,CommonJS 诞生了 CommonJS 的终极目标是制定一个像 C++ 标准库一样的规范,使得基于 CommonJS API 的应用程序可以在不同的环境下运行,就像用 C++ 编写的应用程序可以使用不同的编译器和运行时函数库一样 Node.js 是目前 CommonJS 规范最热门的一个实现,它基于 CommonJS 的 Modules/1.0 规范实现了 Node.js 的模块,同时随着 CommonJS 规范的更新,Node.js CommonJS 规范的实现 Node.js 的模块和包机制的实现参照了 CommonJS 的标准,但并未完全遵循。 CommonJS 中的 Require 建议阅览:CommonJS require 规范

    9020

    hey,你的CommonJS规范

    CommonJS规范概述 一个文件就是一个模块,拥有单独的作用域 普通方式定义的变量,函数,对象都属于该模块内的私有属性 通过require来加载其他模块通过module.exports导出的内容 通过 exports和module.exports来导出模块中要暴露的内容 简单使用一下CommonJS A文件 let str = 'hello world'; module.exports = str; /A'); console.log(a); // => 'hello world' 复制代码 ---- CommonJS的简易实现 先梳理一下流程: Module.

    7510

    读懂CommonJS的模块加载

    叨叨一会CommonJS Common这个英文单词的意思,相信大家都认识,我记得有一个词组common knowledge是常识的意思,那么CommonJS是不是也是类似于常识性的,大家都理解的意思呢? CommonJs规范 那么CommonJS规范了些什么呢?要解释这个规范,就要从JS的特性说起了。JS是一种直译式脚本语言,也就是一边编译一边运行,所以没有模块的概念。 那么CommonJS可以用于那些方面呢?虽然CommonJS不能再浏览器中直接使用,但是nodejs可以基于CommonJS规范而实现的,亲儿子的感觉。 CommonJs模块和ES6模块的区别 使用场景 CommonJS因为关键字的局限性,因此大多用于服务器端。 CommonJS模块总结 CommonJS模块只能运行再支持此规范的环境之中,nodejs是基于CommonJS规范开发的,因此可以很完美地运行CommonJS模块,然后nodejs不支持ES6的模块规范

    25430

    commonjs与es6 module

    当前最主流的两个模块化方案:nodejs使用的是commonjs规范、前台浏览器端主要使用的是es6 Module nodejs当前就是commonjs规范的代表实践者,因此用的是require。 用法如下: ES6 Module export a = 1 export default b = 2 import { a } from x.js import b from x.js commonjs exports.a = {} // 不能重写 exports,比如:exports = { a: {} } 调用方法 var x = require('x.js') console.log(x.a, x.b) commonjs 和es6 module对比 1.commonjs输出的是值的拷贝、es6 输出的是值的引用 2.commonjs是运行时加载,es6 是编译时输出接口 对待循环引用的区别: es6模块,遇到模块加载命令 CommonJS模块,的特性是加载时执行,在首次加载的时候就已经执行出结果了,此结果会一直缓存在内存中,等需要用到的时候直接取用缓存结果,因此,如果出现循环引用,只会输出已经执行的部分 其它,amd、cmd

    8320

    NodeJS学习二CommonJS规范

    Node模块采用了CommonJS规范。 根据CommonJS规范,一个单独的文件就是一个模块。 CommonJS规定,每个文件的对外接口是module.exports对象。这个对象的所有属性和方法,都可以被其他文件导入。 AMD规范与CommonJS规范的兼容性 CommonJS规范加载模块是同步的,也就是说,只有加载完成,才能执行后面的操作。AMD规范则是非同步加载模块,允许指定回调函数。 由于Node.js主要用于服务器编程,模块文件一般都已经存在于本地硬盘,所以加载起来比较快,不用考虑非同步加载的方式,所以CommonJS规范比较适用。 require的内部处理流程 require命令是CommonJS规范之中,用来加载其他模块的命令。

    31520

    webpack模块化原理-commonjs

    bar.bar(); } webpack传入的第一个参数module是当前缓存的模块,包含当前模块的信息和exports;第二个参数exports是module.exports的引用,这也符合commonjs 在我们的模块中,就可以对外使用module.exports或exports进行导出,使用__webpack_require__导入需要的模块,代码跟commonjs完全一样。 webpack管理着这些模块的缓存,如果一个模块被require多次,那么只会有一次加载过程,而返回的是缓存的内容,这也是commonjs的规范。 结论 到这里,webpack就hack了commonjs代码。 原理还是很简单的,其实就是实现exports和require,然后自动加载入口模块,控制缓存模块,that's all。 细心的你一定会发现,文章到这里只介绍了webpack对commonjs的实现,那么ES6 module是如何实现的呢? 欢迎阅读本系列第二篇《webpack模块化原理-ES6 module》。

    15130

    fis3 commonJs中的moduleId

    本文作者:IMWeb 袁飞翔 原文出处:IMWeb社区 未经同意,禁止转载 首先看一个有趣的问题 // fis-conf.js fis.hook('commonjs') .match( package', { postpackager: [ fis.plugin('loader', { resourceType: 'commonJs define('utils', function() { // ... }) 解读 实际上moduleId只决定本身的define语句 要让fis识别出类似moduleId的短引用,可以配置commonJs 的paths/packages映射 fis.hook('commonjs', { paths: { utils: '/modules/common/utils.js' }

    28560

    nodejs学习一CommonJS和AMD

    CommonJS CommonJS本质上就是一个规范,它并不提供默认实现,而是要求一些JavaScript库、框架、环境……去实现它的这些API定义。 那么,都有哪些API层面的定义呢? CommonJS定义的模块分为:{模块引用(require)} {模块定义(exports)} {模块标识(module)}, require()用来引入外部模块;exports对象用于导出当前模块的方法或变量 node.js的模块系统,就是参照CommonJS规范实现的。在CommonJS中,有一个全局性方法require(),用于加载模块。假定有一个数学模块math.js,就可以像下面这样加载。 var math = require('math'); //然后,就可以调用模块提供的方法: var math = require('math'); math.add(2,3); // 5 AMD CommonJS 参考文档: 1.wiki-CommonJS

    52020

    模块化-CommonJs、AMD、CMD

    模块化规范 CommonJs CommonJS经node.js应运而生,根据CommonJS规范,每一个模块都是一个单独的作用域。也就是说,在该模块内部定义的变量,无法被其他模块读取。 由于Node.js主要用于服务器编程,加载的模块文件一般都存在本地硬盘,加载起来比较快,不用考虑异步加载的方式,因此,CommonJS规范比较适用。 /a' 这里在语法不做过多介绍,主要说一说 ES6 模块 与 CommonJS 模块 的差异。 它们有两个重大差异: CommonJS 模块输出的是一个值的拷贝,ES6 模块输出的是值的引用。 CommonJS 模块是运行时加载,ES6 模块是编译时输出接口。 第二个差异是因为 CommonJS 加载的是一个对象(即module.exports属性),该对象只有在脚本运行完才会生成。 总结 CommonJS 模块输出的是一个值的拷贝,CommonJS 模块是运行时加载,CommonJS规范主要用于服务端编程,加载模块是同步的,同步意味着阻塞加载,浏览器资源是异步加载的,因此有了AMD

    10130

    Node基础-CommonJS模块化规范

    模块规范设计的,所以模块是NODE的组成 内置模块:NODE天生提供给JS调取使用的 第三方模块:别人写好的,我们可以基于NPM安装使用 自定义模块:自己创建一些模块 CommonJS模块化设计的思想( AMD/CMD/ES6 MODULE都是模块设计思想) 1.CommonJS规定,每一个JS都是一个单独的模块(模块是私有的:里面涉及的值和变量以及函数等都是私有的,和其它JS文件中的内容是不冲突的 ) 2.CommonJS中可以允许模块中的方法互相的调用 B模块中想要调取A模块中的方法 =>A导出 =>B导入 [导出] CommonJS给每一个模块 提供的内置变量,用来导入模块的(其实导入的就是module.exports暴露出来的东西);导入的值也是[object]类型的; CommonJS特点: 1. CommonJS规范加载模块是同步的,也就是说,只有加载完成,才能执行后面的操作。

    23520

    fis3 commonJs 中的 moduleId

    作者:feix760 首先看一个有趣的问题 // fis-conf.js fis.hook('commonjs') .match('/modules/common/utils', { package', { postpackager: [ fis.plugin('loader', { resourceType: 'commonJs 要让fis识别出类似moduleId的短引用,可以配置commonJs的paths/packages映射。 fis.hook('commonjs', { paths: { utils: '/modules/common/utils.js' } }) 寻找文件依赖是在lookup

    49500

    fis3 commonJs中的moduleId

    本文作者:IMWeb 袁飞翔 原文出处:IMWeb社区 未经同意,禁止转载 首先看一个有趣的问题 // fis-conf.js fis.hook('commonjs') .match( package', { postpackager: [ fis.plugin('loader', { resourceType: 'commonJs define('utils', function() { // ... }) 解读 实际上moduleId只决定本身的define语句 要让fis识别出类似moduleId的短引用,可以配置commonJs 的paths/packages映射 fis.hook('commonjs', { paths: { utils: '/modules/common/utils.js' }

    20510

    模块化之AMD、CMD、UMD、commonJS

    、AMD、CMD、UMD CommonJS: 这应该是最早的JavaScript模块化编程,主要是用于服务端,nodeJS就是使用commonJS,我们最常用的webpack也是使用commonJSCommonJS规范中一个文件就是一个模块,通过exports暴露模块内的内容,通过require加载模块使用,且commonJS是同步的,因为在服务端文件就在本地,可以不用考虑异步。 的规范,也就是AMD和commonJS的一个糅合。 AMD异步加载,commonJS同步加载,而UMD就是判断环境,有nodejs模块(require)就使用commonJS,有AMD模块(define)就使用AMD。 UMD:AMD和commonJS的结合,可以服务端使用也可以浏览器使用。 ES6:语言标准的模块化,取代UMD,服务器和浏览器都能使用。

    28940

    关于 CommonJS AMD CMD UMD 规范的差异总结

    一、CommonJS 主要是用于服务器端的规范,比如目前的nodeJS. 根据CommonJS规范,一个单独的文件就是一个模块。 像Node.js主要用于服务器的编程,加载的模块文件一般都已经存在本地硬盘,所以加载起来比较快,不用考虑异步加载的方式,所以CommonJS规范比较适用。 Sea.js 更贴近 CommonJS Modules/1.1 和 Node Modules 规范。 推广理念有差异。 ” 四、UMD umd是AMD和CommonJS的糅合 AMD 浏览器第一的原则发展 异步加载模块。 CommonJS 模块以服务器第一原则发展,选择同步加载,它的模块无需包装(unwrapped modules)。

    76410

    扫码关注腾讯云开发者

    领取腾讯云代金券