Containjs 1.0

Containjs 是什么?

Containjs 是一个基于 Commonjs 模块管理规范的 浏览器端 的 JavaScript 模块加载器(目前为非标准的,代码会持续迭代,现阶段主要提供思路,想集结各路 js 大神一同完善)

Containjs 项目地址

Containjs 使用

获取 Containjs

去 gitHub 下载 页面下载文件。

目录结构

Containjs 目前的目录结构非常简单,项目中 JavaScript 都放在一个 "js" 目录。 例如, 你的项目中有一个 index.html 页面和一些 js 文件

├─index.html 项目html所在目录为主目录

├─js/ 项目js目录

├─├─lib/ 项目类库目录 // 非必须

├─├─└─contain.js contain.js框架文件 // 也可以放在其他目录,只需引入即可

├─├─a.js

├─├─b.js

├─└─app.js 项目的入口文件

开始使用

在你的应用中包含 Contain.js 文件,并且使用服务器环境打开(本地服务器即可)

// index.html
<script src="js/lib/Contain.js"></script>

然后在 js/app.js 入口文件中开始编写你的应用代码

Ps:需要注意的是,js/app.js 为默认入口文件,暂时未支持修改

Containjs 模块使用教程,像写 node 一样写浏览器端代码即可

Ps:如果您已经对于,Commonjs规范有所了解,则不需要看此教程

模块依赖

Containjs 的模块依赖非常简单,使用 require(url) 函数直接引入即可

var a = require('a.js')

Ps:需要注意的是,在 Containjs 中,url 需要纯静态的字符串,不支持使用表达式或者变量

模块定义

Containjs 的模块定义非常简单,满足 commonjs 模仿,以一个文件一个模块的形式,暴露接口的方式也符合 commonjs 规定

//a.js
var name = 'a.js' var getName = function() {
console.log(name)
} // 使用模块中的全局变量 exports 提供对外接口
exports.getName = getName // 或者也可以这样
module.exports.getName = getName

使用 Containjs 常见问题解答

为什么 index.html 页面必须使用服务器环境打开,例如:127.0.0.1/index.html 打开

答:原因是 containjs 所以的文件均有 ajax 异步加载

为什么 require(url) 中的 url 不可以是变量或者表达式。只能是单纯字符串

答:原因是 Containjs 模块中所依赖文件均是使用异步提前加载,同步 require 时调用执行,而异步提前加载的原理是,使用正则表达式去匹配出需要调用的模块的,如果使用表达式则会导致无法正确匹配结果导致程序错误

Ps:需要注意的是,在目前的版本中,请不要在注释中出现,require(url),因为这样也会对此模块进行加载,如果本模块这本应用中不需要使用则会导致,浪费的加载

如果我在本应用中多次 require 某个模块会不会导致请求数太多?

答:在 containjs 中,任何模块,只要路径相同只会进行加载一次,加载完成后进行执行上下文的生产(context 但是不会执行),然后存在模块的 module.context 中

且在 containjs 中,require 在多次调用过某一模块过程中,只会进行一次生产模块接口,之后会缓存在 moudule.exports 中,与 node 中不同的是,node 直接返回 module.exports 的引用,而 containjs 则是使用 module.exports 的继承的引用,且每一次调用生产一个新的继承对象,这样带来的好处是,一个应用中只会生产一次本模块的接口,也不必担心被别处修改接口内容

欢迎各路大神和我交流,我的微信号是 : w_z_w_520 (加我请备注前端交流哦)

"浏览器端" 使用 commonjs 模块规范开发网页应用,像开发 node 那样开发网页应用的更多相关文章

  1. CommonJs模块规范

    1.什么是模块化 文件作用域 通信规则 加载 require 导出 exports 2.CommonJs模块规范 在Node中的Javascript还有一个很重要的概念:模块概念 模块作用域 使用re ...

  2. 浏览器加载 CommonJS 模块的原理与实现

    就在这个周末,npm 超过了 cpan ,成为地球上最大的软件模块仓库. npm 的模块都是 JavaScript 语言写的,但浏览器用不了,因为不支持 CommonJS 格式.要想让浏览器用上这些模 ...

  3. 浏览器加载 CommonJS 模块的原理与实现 (阮一峰大哥的 http://www.ruanyifeng.com/blog/2015/05/commonjs-in-browser.html)

    就在这个周末,npm 超过了 cpan ,成为地球上最大的软件模块仓库. npm 的模块都是 JavaScript 语言写的,但浏览器用不了,因为不支持 CommonJS 格式.要想让浏览器用上这些模 ...

  4. NodeJs的CommonJS模块规范

    前言 本人记忆力一般,为了让自己理解<深入浅出Node.js-朴灵>一书,会在博客里记录一些关键知识,以后忘了也可以在这里找到,快速回想起来 Node通过require.exports.m ...

  5. commonJS模块规范 和 es6模块规范 区别

    ES6 模块与 CommonJS 模块的差异 CommonJS 模块输出的是一个值的拷贝,ES6 模块输出的是值的引用. CommonJS 模块是运行时加载,ES6 模块是编译时输出接口. Commo ...

  6. CommonJS 模块规范 1.1.1

    本规范致力于描述一类可以同时适用于客户端和服务器端的模块系统.该系统中的模块拥有自己的作用域,可以从其他模块导入单例对象,或者对外提供 API. Require require 是一个函数对象. re ...

  7. JS模块规范:AMD,CMD,CommonJS

    浅析JS模块规范 随着JS模块化编程的发展,处理模块之间的依赖关系成为了维护的关键. AMD,CMD,CommonJS是目前最常用的三种模块化书写规范. CommonJS CommonJS规范是诞生比 ...

  8. Javascript模块规范(CommonJS规范&&AMD规范)

    Javascript模块化编程(AMD&CommonJS) 前端模块化开发的价值:https://github.com/seajs/seajs/issues/547 模块的写法 查看 AMD规 ...

  9. 理解CommonJS ,AMD ,CMD, 模块规范

    参考 : https://blog.csdn.net/xcymorningsun/article/details/52709608 1.CommonJS 模块规范 (同步加载模块): var math ...

随机推荐

  1. python bottle 简介

    bottle是一个轻量级的python web框架, 可以适配各种web服务器,包括python自带的wsgiref(默认),gevent, cherrypy,gunicorn等等.bottle是单文 ...

  2. hessian原理解析一(客户端分析)

    hessian 是一款开源的二进制远程通讯协议,使用简单方法提供了RMI功能,主要用于面向对象的消息通信. 优点:跨平台.多语言支持.使用简单 缺点:传递复杂对象性能会下降,不适合安全性高的应用 一 ...

  3. 项目实战(连载):基于Angular2+Mongodb+Node技术实现的多用户博客系统教程(2)

    本章主要讲什么(一句话)?   <项目实战:基于Angular2+Mongodb+Node技术实现的多用户博客系统教程(2)> -- 基于MongoDB的MyBlog数据库知识技术储备(上 ...

  4. 《JAVASCRIPT高级程序设计》DOM扩展

    虽然DOM为XML及HTML文档交互制定了一系列的API,但仍然有几个规范对标准的DOM进行了扩展.这些扩展中,有很多是浏览器专有的,但后来成了事实标准,于是其他浏览器也提供了相同的实现:浏览器开发商 ...

  5. loadrunner解决浏览器死机问题

    初次接触loadrunner时,遇到很多问题.浏览器崩溃以及录不到脚本就折磨了一周时间.最后终于解决 一.浏览器崩溃问题 1.退出安全卫士和防火墙 2.去掉IE第三方扩展.工具-Internet选项- ...

  6. C++ 头文件系列 (algorithm)

    简介 algorithm头文件是C++的标准算法库,它主要应用在容器上. 因为所有的算法都是通过迭代器进行操作的,所以算法的运算实际上是和具体的数据结构相分离的 ,也就是说,具有低耦合性. 因此,任何 ...

  7. 记一次阿里云Linux服务器安装.net core sdk的问题以及解决方法

    因为公司领导要求新的项目能跨平台部署,也就是说能部署到Linux服务器上,故新的项目采用了Asp.net mvc core 1.1 进行开发.开发过程一切都比较顺利,然后在之前申请试用的一台微软Azu ...

  8. 特殊的string类型

    1.前言 string是属于引用类型的,这个大家都知道吧?但是平常在使用的过程中,发现它还是拥有一些值类型的特征的,这到底是为什么呢? 原因就是.Net考虑到假如大量的操作string对象的时候,大量 ...

  9. matlab和C语言的break及continue测试

    break和continue语句 有两个附加语句可以控制while和for循环:break和continue语句.break语句可以中止循环的执行和跳到end后面的第一句执行,而continue只中止 ...

  10. 移动端地图技术分享-- 百度高德SDK

    http://blog.csdn.net/zkl99999/article/details/50961155