1、javascript模块化

javascript 模块化是随着 javascript 的工作量逐步增加而产生的必然结果,近年来,javascript 模块化已经诞生了部分标准,也已经在下一代的 javascript 官方标准里提出了草案。

目前,主流的模块化规范是 AMD、CommonJS等,他们良好的规范,优雅的接口设计,合理的设计模式被很多前端开发工程师所接受,并且也有很多模块化加载器也支持他们,例如 requireJS、seaJS等。

2、javascript模块加载器

2.1、coolie 优势

coolie (苦力)是作者在近期书写的一款模块加载器,相比市面上的其他模块加载器,有以下优势:

  1. 轻量,良好的身材,仅支持高级现代浏览器,没有繁多的路径别名,和 NodeJS 一样,仅支持本地模块。

  2. 小巧,尽量少的接口(2个接口)和配置(2个配置)。

  3. 优雅,合理的接口和配置。

  4. 安全,尽量不侵入全局变量(2个,分别是 define 和 coolie),放心编程。

  5. 方便,配套的发布构建工具,为之量身打造。

  6. 省心,一键构建,无须人工干预,没有繁多和难以理解的构建配置。

2.2、本地开发环境

开发环境下,不显式模块ID和模块依赖,模块路径必须写完整:

模块入口:./index.js

// 开发环境不能写模块ID
define(function (require){// 模块依赖,不能省略文件后缀var num = require('./abc.js');var text = require('text!./def.txt');alert(num + text);// => "123这里是一串纯文本"
});

依赖模块:./abc.js

// 开发环境不能写模块ID
define(function (require, exports, module){// 模块导出module.exports = 123;
});

依赖文本:./def.txt

这里是一串纯文本

2.3、生产环境下:

发布之后,模块入口:./index.js?v=abc123

define('0', ['1', '2'], function (a){var b = a('1');var c = a('2');alert(b+c);// => "123这里是一串纯文本"
});
define('1', [], function (a, b, c){c.exports = 123;
});
define('2', [], function (a, b, c){c.exports = '这里是一串纯文本';
});

2.4、coolie配置

coolie.config({// * 入口模块的基准路径,也可以写绝对路径// `base`是相对于`coolie.js`所在的路径的,因此只要`coolie.js`路径不变,配置文件无论被哪个文件引用都没关系// 可选,默认为`coolie.js`所在的路径base: './',// * 模块文件版本,用于清除文件缓存,常用于发布到生产环境上,具体细节查看`coolie`发布工具// 比如入口文件是`index.js`,那么实际请求的路径为`/path/to/index.js?_=abc123`// 可选,默认为空version: 'abc123'
});

注意点

  1. base参数配置,与sea.js有些出入,请注意。

  2. base参数是相对于coolie.js所在路径的。

  3. base参数也是入口模块的相对路径。

  4. version版本号在开发环境下可以为空,构建时会自动更新版本号以便清除生产环境下的缓存。

2.5、coolie 使用

// 运行入口模块路径,注意这里没有回调
// 模块路径相对于`config.base`
coolie.use('./index.js');

注意点

  1. 必须手动调用.use()方法。

  2. 参数是入口模块路径,不是入口模块名称。

  3. 为了配置文件的重用性,当coolie.js所在的script指定了data-main属性,内联属性优先级最高,因此.use参数此时可以为空。 如:<script src="./coolie.js" data-main="./index2.js"></script>,此时入口模块就为相对于config.base./index2.js文件。 此种情况会在控制台输出提示。

3、模块构建工具

3.1、介绍

配套的模块构建工具 coolie(苦力),已在 npmjs 官方上线。作者之前也使用过 spm3 打包,感觉还是太复杂了,后来自制了 apb,再后来就索性自己写了一整套东西,包括模块加载器和模块构建工具。尽量保持它们的良好身材,只做它们擅长和分内的事情。

3.2、优势

相比其他构建工具,他有以下优势:

  1. 优雅,大众化和易理解的API。

  2. 易用,全部自动生成配置文件,每一步都有详细说明。

  3. 安全,不修改任何源文件。

  4. 极致,全部模块,压缩所有可压缩的内容,包括模块ID、模块依赖路径、局部变量等。

3.3、特点

更多API说明,请移步 github 项目,链接如下。

3、链接

  • coolie模块加载器:https://github.com/cloudcome/coolie

  • coolie模块构建工具:https://github.com/cloudcome/nodejs-coolie

javascript 模块加载器——coolie相关推荐

  1. javascript模块化、模块加载器初探

    最常见网站的javascript架构可能是这样的: 一个底层框架文件,如jQuery 一个网站业务框架文件,包含整站公用业务模块类(如弹框.ajax封装等) 多个业务文件,包含每个具体页面有关系的业务 ...

  2. Javascript模块加载捆绑器Browserify Webpack和SystemJS用法

    Javascript模块加载捆绑器Browserify Webpack和SystemJS用法 转自 http://www.jdon.com/idea/js/javascript-module-load ...

  3. seajs引入html,SeaJS:一个适用于 Web 浏览器端的模块加载器

    什么是SeaJS? SeaJS是一款适用于Web浏览器端的模块加载器,它同时又与Node兼容.在SeaJS的世界里,一个文件就是一个模块,所有模块都遵循CMD(Common Module Defini ...

  4. angularjs源码阅读-1-模块加载器

    angularjs源码-setupModuleLoader 背景和开始 publishExternalAPI引入setupModuleLoader setupModuleLoader下面的逻辑 ens ...

  5. linux ipv6模块,有关Linux ipv6模块加载失败的问题

    有关Linux ipv6模块加载失败的问题 同事一个SUSE11sp3环境配置ipv6地址失败,提示不支持IPv6,请求帮助,第一反应是应该ipv6相关内核模块没有加载. 主要检查内容: ipv6地址 ...

  6. JS框架设计之加载器所在路径的探知一模块加载系统

    1.要加载一个模块,我们需要一个URL作为加载地址,一个script作为加载媒介,但用户在require是都用ID,我们需要一个将ID转换为URL的方法,思路很简单,强加个约定,URL的合成规则是为: ...

  7. javascript 异步模块加载 简易实现

    在javascript是没有类似java或其他语言的模块概念的,因此也不可能通过import或using等关键字来引用模块,这样造成了复杂项目中前端代码混乱,变量互相影响等. 因此在复杂项目中引入AM ...

  8. webpack中loader加载器(打包非js模块)

    通过loader打包非js模块 我这儿用VScode为编辑器 在实际开发过程中,webpack默认只能打包处理以.js后缀名结尾的模块,其他非. js后缀名结 尾的模块,webpack 默认处理不了, ...

  9. AMD加载器实现笔记(四)

    继续这一系列的内容,到目前为止除了AMD规范中config的map.config参数外,我们已经全部支持其他属性了.这一篇文章中,我们来为增加对map的支持.同样问题,想要增加map的支持首先要知道m ...

  10. js css加载器,webpack的CSS加载器的使用

    什么是loader loader用于转换应用程序的资源文件,他们是运行在nodejs下的函数,使用参数来获取一个资源的来源并且返回一个新的来源(资源的位置),例如:你可以使用loader来告诉webp ...

最新文章

  1. python怎么导入同一包的模块
  2. 十九、约束作用及常见约束
  3. axios基础和封装
  4. 【PyQt5】QT designer + eclipse 集成开发
  5. idea无法启动Tomcat
  6. core和node开发小程序_node+微信小程序实现商城案例
  7. 无法启动程序因为计算机中丢失dev,DevUseAnalyzerTask.dll
  8. rvm,ruby的安装
  9. 解决SAP PI Cluster系统故障
  10. Android下载文件,如何获取实际的文件名
  11. Adobe Creative Cloud 不能加载APP导致卸载ps失败 解决方案
  12. UI设计师求职中常被问到的13个面试题及答案总结
  13. 《伸手系列》之arm架构服务器安装kubernetes
  14. PDF打开时显示“正在准备文档以供阅读
  15. 2016计算机技术操作考试题,2016年计算机二级《VB》上机操作题(1)
  16. debian ELK6.2.2安装教程
  17. 名帖301 刘墉 行书《自作诗卷》
  18. VMware 笔试题目:猫和老鼠玩象棋
  19. Linux基础入门-2
  20. E-Prime2.0安装问题

热门文章

  1. 怎么在PDF中插入文本框并输入文字?
  2. #IP实验室,第二周复盘
  3. IP-Link简单实验配置
  4. 前端连接websocket失败_websocket连接失败后多久会触发error事件?
  5. IDEA 找不到或无法加载主类
  6. AIC、BIC、QAIC及HQ准则
  7. android p 小米6,小米6 想升级 Android P,系统软件工程师发话:可适配
  8. C语言入门练习— —累乘
  9. uva 10246 Asterix and Obelix(最短路问题拓展 dijkstra)
  10. 一文读懂图像局部特征点检测算法!