JS模块化

模块化的好处:1.避免命名冲突

                          2.更好的分离,按需加载

                          3.更高的复用性

                          4.高可维护性

    <script type="text/javascript" src="module1.js"></script>
    <script type="text/javascript" src="module2.js"></script>
    <script type="text/javascript" src="module3.js"></script>
    <script type="text/javascript" src="module4.js"></script>

 

问题:               1.引入文件过多

                          2.依赖模糊

                          3.难以维护

1.闭包IIFE模式

var loadingRender = (function (window,$) {
var a = 1;
return { init: function () { } } })(window,jQuery) loadingRender.init()

好处:模块内变量不受外界干扰;外面无法修改内部变量;只暴漏一个初始化的接口

2.服务器端commonJS使用方法

## Node.js模块化教程生成webpack文件 npm init
1. 下载安装node.js
2. 创建项目结构
```
|-modules
|-module1.js
|-module2.js
|-module3.js
|-app.js
|-package.json
{
"name": "commonJS-node", //姓名不能中文,和大写
"version": "1.0.0"
}
```
3. 下载第三方模块
* npm install uniq --save
4. 模块化编码
/*暴露一个对象*/
module.exports = {
    msg:'module',
    foo(){
        console.log(this.msg)
    }
};
/*暴露一个函数*/
module.exports = function () {
  console.log('module2')
}
/*exports对象暴露出去*/
exports.foo = function () {
  console.log('module3')
}
exports.arr = [1,2,3,4,5,6,1,2,3,1,2];

调用

/*第三方模块引用*/
let uniq = require('uniq');
/*自定义模块引用*/
let module1 = require('./modules/module');
let module2 = require('./modules/module2');
let module3 = require('./modules/module3');
/*执行方法*/
module1.foo();
module2();
module3.foo();
let ary = uniq(module3.arr);
console.log(ary)
5. 通过node运行app.js
* 命令: node app.js
* 工具: 右键-->运行

3.在浏览器中使用commonjs## Browserify模块化使用教程1. 创建项目结构
  ```
|-js
|-dist //打包生成文件的目录
|-src //源码所在的目录
|-module1.js
|-module2.js
|-module3.js
|-app.js //应用主源文件
|-index.html
|-package.json
{
"name": "browserify-test",
"version": "1.0.0"
}
```
2. 下载browserify
* 全局: npm install browserify -g
* 局部: npm install browserify --save-dev dev开发环境依赖 save注入依赖
3. 定义模块代码
* module1.js
```
module.exports = {
foo() {
console.log('moudle1 foo()')
}
}
```
* module2.js
```
module.exports = function () {
console.log('module2()')
}
```
* module3.js
```
exports.foo = function () {
console.log('module3 foo()')
}

exports.bar = function () {
console.log('module3 bar()')
}
```
* app.js (应用的主js)
```
//引用模块
let module1 = require('./module1')
let module2 = require('./module2')
let module3 = require('./module3')

let uniq = require('uniq')

//使用模块
module1.foo()
module2()
module3.foo()
module3.bar()

console.log(uniq([1, 3, 1, 4, 3]))
```
* 打包处理js:
* browserify js/src/app.js -o js/dist/bundle.js
* 页面使用引入:
<script type="text/javascript" src="js/dist/bundle.js"></script> ;


4.ES6模块

posted @ 2018-07-23 11:44  追忆枉然  阅读(166)  评论(0编辑  收藏  举报