zoukankan      html  css  js  c++  java
  • JS模块化知识总结

    背景

    <script src="a.js"></script>
    <script src="b.js"></script>
    <script src="c.js"></script>
     ...........
     
    js 文件之间相互依赖,变量会造成全局的污染,而且js之间的依赖顺序也会容易出错,容易造成混乱

    AMD 

    定义:异步方式加载模块,模块的加载不影响它后面语句的运行。所有依赖这个模块的语句,都定义在一个回调函数中,等到加载完成之后,这个回调函数才会运行

    RequireJs

    • util.js
    define(function(){
    var util ={
    getFormatDate: function(date,type) {
    if(type ===1){
    return '2017-06-21';
    }else{
    return '2017年06月21日';
    }
    }
    }
    return util;
    })
    • a_util.js

    define(['./util.js'],function(util){
    var aUtil={
         aGetFormatDate: function(date) {
    return util.getFormatDate(date,2)
    }
    }
    })
    • a.js

    define(['./a_util.js'],function(aUtil){
    var a={
         printFormatDate: function(date) {
    console.log(aUtil.aGetFormatDate(date));
    }
    }
    return a;
    })
    • main.js

    require(['./a.js'],function(a) { //require 异步加载的模块必须定义为define
    var date =new Date();
    a.printDate(date);
    })
    • 入口文件(app.html)

    <script data-main="./main.js" src ="....引用require.js">

    CommonJS 

    nodejs 模块化规范,现在被大量用于前端开发:前端开发依赖的库和插件,都可以从 NPM 服务器中获取,构建工具的高度自动化,使之npm 成本非常低,CommonJS 不会异步加载JS,而是同步一次性加载出来,
    modele.exports = {
    getFormatDate: function(date,type) {
    ........
    }
        }
    
      .......  

    AMD 和 CommonJS 的使用场景

    需要异步加载JS,使用AMD
    使用了NPM ,建议使用CommonJS

    构建工具

    webpack

    webpack 是根据webpack.config.js构建出bundle.js 文件:
    import path from 'path'
    module.exports = {
      context :path.resolve(__dirname, './src') .  //入口文件所在目录路径拼接
      entry: './app', //入口文件
      output: {  //webpack 构建出的文件
        path: path.resolve(__dirname,'dist')
        filename: 'bundle.js'
      },
      module: {
     loaders: [ //module.loaders分配加载程序
    { 
    test: /.jsx?$/, 
    exclude: /node_modules/, 
    loader: 'babel', 
    query: { presets: ['es2015', 'react'] } .  //需要babel-preset-es2015和babel-preset-react转义
            }
     ] 
    },
      plugins: [
    new webpack.optimize.UglifyJsPlugin() //压缩
      ]
    ...........
    };          
    

      

  • 相关阅读:
    js插件zClip实现复制到剪贴板功能
    基于jQuery的滚动条插件-jquery.jscrollbar
    jquery mobile 开启开关
    html5 中audio 在safari上不支持自动播放
    开发人员常用的10个Sublime Text插件
    通过padding-bottom或者padding-top实现等比缩放响应式图片
    get请求下载json文件正常,但是不弹出status
    JSON错误
    对象与类
    数组(二)
  • 原文地址:https://www.cnblogs.com/fuGuy/p/9212186.html
Copyright © 2011-2022 走看看