webpack&&linux

1. 为什么需要模块化
如果有下面这种情况

util.js文件里面定义了下面这个函数

    function getFormatDate(a,b){
      return a+b;
    }

a-util.js中需要用到util.js里面的getFormatDate这个函数

    function aGetFormatDate(c){
      return aGetFormatDateFormatDate(2,c);
    }

a.js里面需要用到a-util里面的aGetFormatDate()这个函数

    function get(){
      console.log(aGetFormatDate(7));
    }

如果我们采用原始的方法,用

    <script src="util.js"></script>
    <script src="a-util.js"></script>
    <script src="a.js"></script>

会出现这样的问题:
因为用<script>标签是按顺序加载的,必须保证a-util.js在util.js后面,函数中变量必须是全局变量,这样才能暴露出来给其他函数使用,容易造成全局变量污染。

而且当你只需要a.js的时候,你只知道依赖a-util.js,你不知道需要依赖util.js,还是会出现错误。你必须很清楚他们之间的依赖关系。

当使用模块化的时候,就不会有这样的问题。

      util.js
      export{
      getFormatDate:function(a,b){
                    return a+b}}  //将你要暴露的函数暴露出来

      a-util.js
      var getFormatDate=require('util,js')//引用所依赖的文件,取到你要用的函数
      export{
      aGetFormatDate:function(c)       
              return getFormatDate(2,c);
                }
       }

    a.js
    var aGetFormatDate=require('a.js')//引用所依赖的文件'a,js',取到要用的函数aGetFormatDate
    console.log(aGetFormatDate(7));

这个时候我们只要直接引用 <script src="a.js"></script>这个最表面的js文件即可,其他根据依赖关系自动加载。

每个js文件都知道自己依赖什么其他文件,让他们自动加载即可 
而且也不用做成全局变量
AMD 中require.js规范


image.png
image.png

要下载require.min.js这个包,再引入入口文件,也就是我们看到的最表层的文件,main.js

看一下我们的require实例


image.png

不需要依赖任何一个其他文件的util


image.png

需要依赖util的a-util
image.png
image.png
image.png

最后在控制台打印出4

AMD是异步加载Commonjs是一次性全部加载

在html网页中,浏览器通过<script>标签加载js脚本。

ES6模块允许内嵌在网页中,也就是在<script>标签里面,语法行为与加载外部脚本一致;
如下:

    <script type="module"> 
    import utils from "./utils.js"; // other code
    </script>

模块功能主要由两个命令构成:export和import。export命令用于规定模块的对外接口,import命令用于输入其他模块提供的功能。

本机开启


image.png

主要命令为:

      cnpm install http-server -g  //开启服务
      http-server -p 8088   //选择端口

关于webpack的配置

自己新建一个webpack.config.js文件
在里面进行入口文件和输出文件的设置

    const path = require("path")  //定义一个路径,这个是一定要写的,可以不用管他,就当作是我们这一整个webpack项目的位置

    module.exports={

    entry:path.join(__dirname,"src/script/main.js"),  //设置了程序的入口.就在这个项目src下面的script下面的main.js,注意dirname前面是__

    output:{

    filename:"bundle.js",    //输出的文件名为bundle.js

    path:path.join(__dirname,"dist")     //设置了输出文件名的路径,在本项目的dist文件夹下面,没有的话webpack会自己建的
     }
  }
    //module.exports就要要想外界暴露的部分,外面的人可以根据这个来进行操作

简而言之,构建一个webpack应用的步骤如下:
1. 新建一个文件夹,这里我给他起个名字叫 web
2. 在web的路径下用命令行
  cnpm install webpack --save-dev  //我已经用淘宝镜像了cnpm
3. 自己新建webpack.config.js定义入口和出口文件
4. 弄个js文件什么的打包
在web的路径下用命令行
   webpack
就可以了

打包出来的bundle.js为什么有那么多乱七八糟的内容?
只要是为了封装js,使其支持commonjs的模块化
commonjs是要依赖于nodejs webpack的

image.png

调用的时候是这样的
上面的这个文件名叫a-util
引用出来的对象的名字是aUtil
看两张图好好感受一下


image.png

0713


commonjs中:
module对象:在每一个模块中,module对象代表该模块自身。
export属性:module对象的一个属性,它向外提供接口。

实例:
建立了一个模块,向外面暴露出f1函数


image.png
    module.exports = {
    f1:function(){
    console.log(1234);
    }
}
image.png
var util=require('./util.js');
util.f1();  

用webpack命令打包之后,可以index页面的控制台打印出1234
成功
文件目录如下:


image.png

如何用webpack压缩js代码

  1. 首先在webpack.config.js中引入

     const uglify = require('uglifyjs-webpack-plugin');
    

2.然后在entry和output后面加上

  plugins:[
    new uglify()
 ]
image.png

然后再执行“webpack”命令编译一下


image.png

被压缩啦

webpack都做了哪些事情?

模块化
打包依赖
webpack支持commonjs,如果没有模块化,用<script>标签引入,我们要完全搞清楚每个模块之间的依赖关系,要保证你依赖的js文件在你这个文件的前面,搞错一个依赖关系就完蛋,而且要定义很多全局变量,会造成全局变量污染。
webpack的理念就是一切皆模块,把那一大堆css,js在我的一个总入口文件require引入,剩下的事情webpack会自动处理,包括所有模块的前后依赖关系去下载啊处理

压缩Js代码
先了解一下Webpack从构建到输出文件结果的过程
1.解析配置参数,合并从shell传入和webpack.config.js文件的配置信息,输出最终的配置信息
2.注册配置中的插件,好让插件监听webpack构建生命周期中的事件节点,做出对应的反应
3.解析配置文件中entry入口文件,并找出每个文件依赖的文件,递归下去
4.在递归每个文件的过程中,根据文件类型和配置文件中loader找出相对应的loader对文件进行转换
5.递归结束之后得到每个文件最终的结果,根据entry配置生成代码chunk
6.输出所有chunk到文件系统

linux常见命令

windows系统下面可以直接用git bash,命令就是shell命令
mkdir src在当前目录下面新建一个名字叫src文件夹
ls 查看当前路径下面的文件夹
ll 跟ls差不多,比ls详细一点
vi a.js 如果a,js不存在就新建,如果存在就编辑
这个是文本编辑器,执行这个命令之后会进入编辑页面,要先按 i 才能进入输入模式,按esc就又不在输入模式下面了。
比如在编辑完了就按esc,然后再输入:w(这个是显示在下面的),w是保存
:q 是退出。
cat a.js 不用进入编辑模式就是查看文本内容
head a.js 不用进入编辑模式就是查看文本的前部分内容
tail a,js 不用进入编辑模式就是查看文本的前部分内容
head -n 1 a.js 查看第一行内容
tail -n 2 a.js 查看后面两行内容
grep "2" a.js 在a.js里面寻找有2的内容
rm a.js 对某个文件进行删除
mv a.js src/a.js 将a.js移动到src文件夹下面

项目的上线回滚过程:

  • 将测试完成的代码提交到git版本库的master分支
  • 将当前服务器的代码全部打包并记录版本号,备份
  • 将master分支的代码提交覆盖到线上服务器,生成新版本号

回滚流程要点:

  • 将当前服务器的代码打包并记录版本号,备份
  • 将备份的上一个版本号解压,覆盖到线上服务器,并生成新的版本号

输入url到浏览器出现相关页面,这中间发生了什么

  1. 浏览器将域名发给DNS服务器进行解析,然后DNS返回给浏览器对应的IP地址。
  2. 浏览器向这个IP的机器发送HTTP请求(建立在TCP连接上面)
  3. 服务器收到,处理并且返回http请求
  4. 浏览器得到返回内容
  5. 浏览器渲染页面的过程
  • 根据HTML结构生成DOM TREE
  • 根据CSS生成CSSOM(结构化处理形成CSS对象模型)
  • 将CSSOM和DOM整合起来形成RenderTree(渲染树)
  • 浏览器根据RenderTree进行渲染展示
  • 遇到<script>会执行并且阻塞渲染,因为js有能力改变dom,不能一边渲染一边改变dom,浏览器会混乱的。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,588评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,456评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,146评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,387评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,481评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,510评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,522评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,296评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,745评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,039评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,202评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,901评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,538评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,165评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,415评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,081评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,085评论 2 352

推荐阅读更多精彩内容

  • 1 Webpack 1.1 概念简介 1.1.1 WebPack是什么 1、一个打包工具 2、一个模块加载工具 3...
    Kevin_Junbaozi阅读 6,656评论 0 16
  • 在现在的前端开发中,前后端分离、模块化开发、版本控制、文件合并与压缩、mock数据等等一些原本后端的思想开始...
    Charlot阅读 5,435评论 1 32
  • 目录第1章 webpack简介 11.1 webpack是什么? 11.2 官网地址 21.3 为什么使用 web...
    lemonzoey阅读 1,732评论 0 1
  • 写在开头 先说说为什么要写这篇文章, 最初的原因是组里的小朋友们看了webpack文档后, 表情都是这样的: (摘...
    Lefter阅读 5,284评论 4 31
  • 焦点讲师一期班洛阳刘琳坚持分享第271天 今天是洛阳焦点读书会的第四期,各位老师百忙之中都如约而至。今天我...
    小溪与大海阅读 173评论 1 0