markdown JavaScript的模块化编程

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了markdown JavaScript的模块化编程相关的知识,希望对你有一定的参考价值。

# requireJs入门

## 一.基本使用

### 1.define定义模块

```JavaScript
//helper.js:

define('helper',['jquery'],function($){
  return {
    trim : function(str){
      return $.trim(str);
    }
  }
})
```

各个部分的解释:<br>
![define定义模块]()<br>

### 2.require加载模块

```JavaScript
//app.js:

require(['helper'],function(helper){
  var str = helper.trim('  amd  ');
  console.log(str);
})
```

![require加载模块]()<br>

### 3.加载文件
requirejs以一个相对于`baseUrl`的地址(也就是路径)来加载所有代码<br>

如果只是单纯在html文件中引用requirejs,那么这个路径就是html文件所在的目录;<br>
如果是使用了`data-main`这个属性,路径就是相对于`data-main`设置的属性值(注意data-main属性值可以不加.js,会默认自动添加)<br>
还有一种方法就直接在加载模块的js文件上配置`baseUrl`:<br>

```JavaScript
//app.js:

requirejs.config({
  baseUrl : '/js'
});

require(['helper'],function(helper){
  var str = helper.trim('  amd  ');
  console.log(str);
})
```

### 4.加载机制
requirejs使用`head.appendChild()`将每一个依赖加载为一个script标签<br>
这意味着模块文件可以跨域访问<br>

另外,requirejs加载后就立即执行<br>


## 二.配置模块路径

假如,各个文件的内容如下:<br>

```JavaScript
//app.js:

requirejs.config({
  baseUrl : '/js'
});

require(['helper'],function(helper){
  var str = helper.trim('  amd  ');
  console.log(str);
})



//helper.js:

define('helper',['./lib/jquery'],function($){
  return {
    trim : function(str){
      return $.trim(str);
    }
  }
});
//注意此时jquery.js的路径改变为/js/lib
```
如果这样使用,最后模块会是`undefined`的对象<br>

如果进入jQuery源代码就可以知道,源码中指定的模块名称是`jquery`,而在声明的代码中不是,所以发生了问题<nt>

![jquery模块名错误]()<br>

要解决这个问题可以使用一个`paths`参数:<br>

```javascript
//app.js
requirejs.config({
  baseUrl : '/js',
  paths : {
    'jquery' : './lib/jquery'
  }
});
//'jquery' :模块名   模块路径: './lib/jquery'
```
另外要补充的是,paths参数不一定是一个对象,还可以是一个数组,数组的第一个选项就是首选加载模块,比如可以是cdn,第二个可以是本地文件(备用)<br>


## 三.定义模块

#### 函数式定义
也就是前面的helper.js的方式<br>

#### 定义简单的对象

```javascript
define({
  user : 'xx',
  age : '18',
  sex : 'male'
})
```

## 四.配置不支持amd的库和框架

比如像modernizr、bootstrap这些。<br>

可以使用shim参数配置<br>

![shim参数]()<br>

加载不支持AMD的库,如modernizr:<br>

```javascript
shim:{
  'modernizr' : {
      exports : 'Modernizr'
  }
}
//将全局变量Modernizr导入为模块
```

加载不支持AMD的框架,比如bootstrp:<br>

```javascript
shim : {
  'bootstrap' : ['jquery']
}
//加载jQuery依赖
```

## 五.其他配置选项

### 加载不同版本的库

```javascript
map : {
  'app/api' : {
    'jquery' : './lib/jquery'
  },
  'app/api2' : {
    'jquery' : './lib/jquery2'
  }
}
```
当app/api模块里加载jQuery模块时,将加载jquery.js<br>
当app/api2模块里加载jQuery模块时,将加载jquery2.js<br>

### 超时
`waitSeconds`:下载js等待时间,默认为7秒;如果设置为0,,则禁用等待超时<br>

`urlArgs`:下载文件时,在url后面增加额外的query参数<bR>
ag: `urlArgs : '_=' + new Date().getTime()`<br>





以上是关于markdown JavaScript的模块化编程的主要内容,如果未能解决你的问题,请参考以下文章

markdown MEDIUM BLOG POST - Javascript的3个主要范例:面向对象编程的三个原则[第2部分,共4部分]

Javascript模块化编程

Javascript模块化编程:模块的写法

Javascript模块化编程

JavaScript模块化编程

Javascript模块化编程