MyException - 我的异常网
当前位置:我的异常网» Web前端 » Modules/1.0[通译]

Modules/1.0[通译]

www.MyException.Cn  网友分享于:2015-08-26  浏览:0次
Modules/1.0[翻译]
Modules/1.0

STATUS: SUPERSEDED BY 1.1

状态: 被Modules/1.1取代


Implementations:
    Flusspferd, GLUEscript, GPSEE, JSBuild, Narwhal (0.1), Persevere, RingoJS, SproutCore 1.1/Tiki, node.js, TeaJS (formerly v8cgi), CouchDB, Smart Platform, Yabble, Wakanda, XULJet

实现实例:
    Flusspferd, GLUEscript, GPSEE, JSBuild, Narwhal (0.1), Persevere, RingoJS, SproutCore 1.1/Tiki, node.js, TeaJS (formerly v8cgi), CouchDB, Smart Platform, Yabble, Wakanda, XULJet


This specification addresses how modules should be written in order to be interoperable among a class of  module systems that can be both client and server side, secure or insecure, implemented today or supported by future systems with syntax extensions. These modules are offered privacy of their top scope, facility for importing singleton objects from other modules, and exporting their own API. By implication, this specification defines the features that a module system must provide in order to support interoperable modules.

本文提出如何写出可以交互的模块,这类模块组成的系统将可以在客户端和服务器端运行,可以是安全的或不安全的,可以是已经实现,抑或者需要在未来的语言扩展后的系统中才能支持。这些模块将保证高度的封装,其他模块通过单例的对象保证引入的灵巧性,以及模块API的输出。本文定义了用以模块间交互的模块系统所必有的功能。


Module Context
  1. In a module, there is a free variable "require", that is a function.
  2.          1.1 The "require" function accepts a module identifier.
             1.2 "require" returns the exported API of the foreign module.
             1.3 If there is a dependency cycle, the foreign module may not have finished executing at the time it is required by one of its transitive dependencies; in this case, the object returned by “require” must contain at least the exports that the foreign module has prepared before the call to require that led to the current module’s execution.
             1.4 If the requested module cannot be returned, “require” must throw an error.
  3. In a module, there is a free variable called "exports", that is an object that the module may add its API to as it executes.
  4. modules must use the "exports" object as the only means of exporting.


模块内容
  1. 在一个模块中,有一个“require”的自由变量,“require”是一个如下的方法。
  2.          1.1 “require”方法接受模块定义。
             1.2 “require”返回外部模块输出地API。
             1.3 如果含有依赖循环,外部模块可能在没有执行完的时候需要引入其他的需要引入一个它需要的依赖;在这种情况,“require”返回的对象必须至少含有输出,这些输出是由外部模块提供,而且必须在当前模块需要执行前被引入。
             1.4 如果被请求的模块没有返回值,则“require”必须抛出一个错误。
  3. 一个模块中,需要含有一个自由变量“exports”,模块会将它的API作为对象加入到“exports”中执行。
  4. 模块将使用“exports”对象作为唯一的输出。



Module Identifiers
  1. A module identifier is a String of “terms” delimited by forward  slashes.
  2. A term must be a camelCase identifier, “.”, or “..”.
  3. Module identifiers may not have file-name extensions like “.js”.
  4. Module identifiers may be “relative” or “top-level”. A module identifier is “relative” if the first term is “.” or “..”.
  5. Top-level identifiers are resolved off the conceptual module name space root.
  6. Relative identifiers are resolved relative to the identifier of the module in which “require” is written and called.


模块定义
  1. 一个模块的定义,是指一串“term”组成的字符串,而这些“term”是被斜杠分割开来的。
  2. 一个term必须是驼峰写法(camelCase)的定义,“.”或“..”。
  3. 模块定义可以不必含有类似于“.js”的扩展名。
  4. 模块定义可以是“相对的”或“顶层的”(应该是指相对路径和绝对路径)。模块定义如果第一个term是“.”或者“..”,则其必是“相对的”。
  5. 顶层模块的定义由概念模块中命名空间的根所解决。
  6. 相对模块的定义是相对于定义的模块require被调用时位置决定的。



Unspecified
This specification leaves the following important points of interoperability unspecified:
Whether modules are stored with a database, file system, or factory functions, or are interchangeable with link libraries.
Whether a PATH is supported  by the module loader for resolving module Identifirers.

未指定
本文对于以下几点很重要的交互性操作并未说明:
模块的存储方式:是数据库,是文件系统,是工厂方法,还是可交互的链接库。
用于解决模块定义的加载器是否支持路径。


代码例子:
math.js
exports.add = function() {
    var sum = 0, i = 0, args = arguments, l = args.length;
    while (i < l) {
        sum += args[i++];
    }
    return sum;
};


increment.js
var add = require('math').add;
exports.increment = function(val) {
    return add(val, 1);
};


program.js
var inc = require('increment').increment;
var a = 1;
inc(a); // 2

文章评论

一个程序员的时间管理
一个程序员的时间管理
如何成为一名黑客
如何成为一名黑客
程序猿的崛起——Growth Hacker
程序猿的崛起——Growth Hacker
总结2014中国互联网十大段子
总结2014中国互联网十大段子
 程序员的样子
程序员的样子
程序员应该关注的一些事儿
程序员应该关注的一些事儿
Java 与 .NET 的平台发展之争
Java 与 .NET 的平台发展之争
看13位CEO、创始人和高管如何提高工作效率
看13位CEO、创始人和高管如何提高工作效率
每天工作4小时的程序员
每天工作4小时的程序员
如何区分一个程序员是“老手“还是“新手“?
如何区分一个程序员是“老手“还是“新手“?
程序员最害怕的5件事 你中招了吗?
程序员最害怕的5件事 你中招了吗?
Google伦敦新总部 犹如星级庄园
Google伦敦新总部 犹如星级庄园
60个开发者不容错过的免费资源库
60个开发者不容错过的免费资源库
Java程序员必看电影
Java程序员必看电影
程序员周末都喜欢做什么?
程序员周末都喜欢做什么?
团队中“技术大拿”并非越多越好
团队中“技术大拿”并非越多越好
我跳槽是因为他们的显示器更大
我跳槽是因为他们的显示器更大
那些性感的让人尖叫的程序员
那些性感的让人尖叫的程序员
初级 vs 高级开发者 哪个性价比更高?
初级 vs 高级开发者 哪个性价比更高?
不懂技术不要对懂技术的人说这很容易实现
不懂技术不要对懂技术的人说这很容易实现
漫画:程序员的工作
漫画:程序员的工作
Web开发者需具备的8个好习惯
Web开发者需具备的8个好习惯
那些争议最大的编程观点
那些争议最大的编程观点
2013年美国开发者薪资调查报告
2013年美国开发者薪资调查报告
十大编程算法助程序员走上高手之路
十大编程算法助程序员走上高手之路
程序员和编码员之间的区别
程序员和编码员之间的区别
5款最佳正则表达式编辑调试器
5款最佳正则表达式编辑调试器
程序员必看的十大电影
程序员必看的十大电影
10个调试和排错的小建议
10个调试和排错的小建议
中美印日四国程序员比较
中美印日四国程序员比较
编程语言是女人
编程语言是女人
Web开发人员为什么越来越懒了?
Web开发人员为什么越来越懒了?
什么才是优秀的用户界面设计
什么才是优秀的用户界面设计
旅行,写作,编程
旅行,写作,编程
科技史上最臭名昭著的13大罪犯
科技史上最臭名昭著的13大罪犯
我的丈夫是个程序员
我的丈夫是个程序员
“懒”出效率是程序员的美德
“懒”出效率是程序员的美德
程序员的鄙视链
程序员的鄙视链
“肮脏的”IT工作排行榜
“肮脏的”IT工作排行榜
当下全球最炙手可热的八位少年创业者
当下全球最炙手可热的八位少年创业者
我是如何打败拖延症的
我是如何打败拖延症的
老程序员的下场
老程序员的下场
亲爱的项目经理,我恨你
亲爱的项目经理,我恨你
做程序猿的老婆应该注意的一些事情
做程序猿的老婆应该注意的一些事情
要嫁就嫁程序猿—钱多话少死的早
要嫁就嫁程序猿—钱多话少死的早
为啥Android手机总会越用越慢?
为啥Android手机总会越用越慢?
老美怎么看待阿里赴美上市
老美怎么看待阿里赴美上市
2013年中国软件开发者薪资调查报告
2013年中国软件开发者薪资调查报告
程序员的一天:一寸光阴一寸金
程序员的一天:一寸光阴一寸金
软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有