require 书写约定
使用 Sea.js 书写模块代码时,需要遵循一些简单规则。
只是书写和调试时的规范!!!构建后的代码完全不需要遵循下面的约定!!!!!!
1. 正确拼写
模块 factory 构造方法的第一个参数 必须 命名为 require
。
- // 错误!
- define(function(req) {
- // ...
- });
- // 正确!
- define(function(require) {
- // ...
- });
2. 不要修改
不要重命名 require
函数,或在任何作用域中给 require
重新赋值。
- // 错误 - 重命名 "require"!
- var req = require, mod = req("./mod");
- // 错误 - 重定义 "require"!
- require = function() {};
- // 错误 - 重定义 "require" 为函数参数!
- function F(require) {}
- // 错误 - 在内嵌作用域内重定义了 "require"!
- function F() {
- var require = function() {};
- }
3. 使用直接量
require
的参数值 必须 是字符串直接量。
- // 错误!
- require(myModule);
- // 错误!
- require("my-" + "module");
- // 错误!
- require("MY-MODULE".toLowerCase());
- // 正确!
- require("my-module");
在书写模块代码时,必须遵循这些规则。其实只要把 require
看做是语法关键字 就好啦。
关于动态依赖
有时会希望可以使用 require
来进行条件加载:
- if (todayIsWeekend)
- require("play");
- else
- require("work");
但请牢记,从静态分析的角度来看,这个模块同时依赖 play 和 work 两个模块,加载器会把这两个模块文件都下载下来。 这种情况下,推荐使用 require.async
来进行条件加载。
Why?
这些约定初看起来会有些小不爽,其实也的确可以通过每次都编译的方式来去掉这些限制。但编译的方式,会给开发调试带来麻烦,代码的实现复杂度也会增加。Sea.js 的核心设计原则是保持简单,遵循 New Jersey Approach:
简单性:设计必须简单,这既是对实现的要求,也是对接口的要求。实现的简单要比接口的简单更加重要。简单是设计中需要第一重视的因素。
更多开发学习资料请访问www.javarecord.com
require 书写约定的更多相关文章
- JavaScript学习总结(六)——前端模块化开发
早期的javascript版本没有块级作用域.没有类.没有包.也没有模块,这样会带来一些问题,如复用.依赖.冲突.代码组织混乱等,随着前端的膨胀,模块化显得非常迫切. 前端模块化规范如下: 一.前端模 ...
- 模块化开发(二)--- seaJs入门学习
SeaJS是一个基于CMD模块定义规范实现一个模块系统加载器 [CMD规范](https://github.com/cmdjs/specification/blob/master/draft/mo ...
- 前端技术 - SeaJS学习
SeaJS 是一个模块加载器,模块加载器需要实现两个基本功能: 实现模块定义规范,这是模块系统的基础. 模块系统的启动与运行. define参数 在 CMD 规范中,一个模块就是一个文件.代码的书写格 ...
- Java中书写要注意的地方
Java的命名规则:以字母.下划线(_)或$符号开头,其后跟任意数目的字母.数字.下划线和$符号. 注意: 数字不能作为标识符的开头: 除了下划线与$符号以外,其余的符号不能使用: 不能使用关键字作 ...
- ES6(ECMAScript 2015) 编码规范与详细注意要点
本规范是基于JavaScript规范拟定的,只针对ES6相关内容进行约定 如变量命名,是否加分号等约定的请参考JavaScript规范 应注意目前的代码转换工具(如Babel,Traceur)不够完善 ...
- ReactNative编写规范
<一> React 代码规范 文件与组件命名 扩展名: 使用.js作为js文件的扩展名.如果同一个文件夹下有同名而不同作用的js文件,则通过中缀(小写)进一步区分,例如:HomePage ...
- 《c# 从入门经典》 (第6版) - 变量和表达式
1,程序就是对一系列数据的操作:数据最终是存储在内存中的0和1数据流:我们在桌面上的任何操作都会改变内存中的数据. 2,变量存储在计算机中占用着一定的内存空间 bit: 位,计算机的最小存储单位,存储 ...
- 详解JavaScript模块化开发
什么是模块化开发? 前端开发中,起初只要在script标签中嵌入几十上百行代码就能实现一些基本的交互效果,后来js得到重视,应用也广泛起来了,jQuery,Ajax,Node.Js,MVC,MVVM等 ...
- php ioc and web rest design
三个核心文件 1.公开访问web service配置 config.php 2.管理BEAN,扫描,注册,初始化等流程 ioc.php 3.管理 rest 拦载处理 ws.php config.php ...
随机推荐
- GA遗传算法解析
LinJM @HQU 谈及遗传算法,我首先想到的就是孟德尔的豌豆实验.当然,遗传算法实质上并不能用豌豆实验说明,豌豆实验探讨了分离定律和自由组合定律,而遗传算法所借鉴的并不是这两个定律.遗传算法,简 ...
- [TypeScript] Function Overloads in Typescript
It's common in Javascript for functions to accept different argument types and to also return differ ...
- qt 与mysql建立交互式连接
void QSqlDatabase::setConnectOptions(const QString & options = QString())Sets database-specific ...
- Java基础知识强化之IO流笔记25:FileInputStream / FileOutputStream 复制图片案例
1. 需求:把D:\\美女.jpg 复制到当前项目目录下mn.jpg 代码示例: package com.himi.filecopy; import java.io.FileInputStream; ...
- Linux Shell删除某一个目录下的所有文件夹(保留其他文件)
#!/bin/bash direc=$(pwd) for dir2del in $direc/* ; do if [ -d $dir2del ]; then rm -rf $dir2del fi do ...
- Spring Mvc和Mybatis的多数据库访问配置过程
Spring Mvc 加Mybatis的多数据库访问源配置访问过程如下: 在applicationContext.xml进行配置 <?xml version="1.0" en ...
- android Lib
Android 支持库软件包含可以添加至应用的多个库.每个库均支持特定范围的 Android 平台版本和功能. 本指南介绍了各支持库提供的重要功能和版本支持,从而帮助您决定在应用中添加哪些支持库.一般 ...
- 解决Visual Studio 找不到报表控件、rdlc中文乱码
找回报表控件 运行安装程序中的 ..\packages\Reporting Services\RVAddon.msi 工具栏,右键选择ReportViewer,注意选择的版本 如果不能编辑报表文件(. ...
- ios专题 - 安全
iOS通过以下几种机制来保全整个系统的安全性: 一:系统结构 所有iOS设备中,系统与硬件都高度集成,从系统启动.系统更新.应用的安装.应用的运行时等多个方面来保全系统的安全,具体包括: 1:所有iO ...
- 为什么用linear regression可以做classification
输出空间 错误衡量方式 能不能直接用linear regression for classification 当成一个分类器回传回去 heuristic(启发式的:试探) 错误衡量 complexit ...