zoukankan      html  css  js  c++  java
  • webpack打包工具

    webpack

    webpack是由facebook公司推广并维护的一套工程化工具,早先为react使用,后来应在其它框架中

    核心理念是:一切文件都是资源,是资源都可以模块化打包加载

    js文件是资源,css文件是资源,模板文件是资源,图片文件是资源等等,所以这些资源都可以模块化打包加载,并且webpack推荐使用commonjs规范

    特点:模块化开发、打包加载

    github:http://github.com/webpack/webpack

    官网:http://webpackjs.org/

      

       浏览器端,是异步模型,资源在服务器上,要加载完再使用

        例如:最开始遵循的module transport规范 (requireJs)

          define([m1, m2], function(m1, m2) {

            在回调中使用模块

            return 暴露接口

          })

      服务器端,是同步模型,资源就在服务器上,所以可以直接使用资源

        例如:commonjs规范:

          使用require(url) 直接使用 同步使用模块

          module.exports暴露接口

    安装

    需要进行两次安装:

    第一次全局安装(全局安装是为了提供指令):

      npm install webpack -g

      npm install webpack-cli –g

      npm install webpack-dev-server -g

    第二次本地安装(本地安装是为了在项目开发中使用):

      npm install webpack

    安装完成,输入webpack -v查看版本号

    配置文件

    webpack配置文件是webpack.config.js,要像定义接口对象一样定义配置。

    通过module.exports暴露接口对象

    入口文件

      入口:所有文件开始打包的地方(引入)

      出口:所有文件打包之后的地方(发布)

      加载机:由于webpack只能识别js文件,除了这个类型之外的文件都不能识别,必须要借助加载机

      插件:webpack本身不具备的功能,我们可以为webpack拓展

    通过entry配置项定义入口文件(webpack最先引入最先处理的文件)

    属性值:

      字符串,表示一个文件地址

      对象,配置多个入口文件

        key表示发布之后的文件名称

        value 表示文件真实地址

    发布文件

    webpack自身没有实现资源定位,所以我们要配置发布的文件(html中引入的文件),通过output配置,属性值是对象

      filename定义发布后的文件名称

        如果有一个入口文件,filename直接写发布的文件

        如果有多个入口文件,用[name]表示文件的名称 ([name]会把entry对应的对象中的key字段替换掉)

      path定义文件发布的地址

        未定义path,默认向dist目录向下发布

        定义了path,将向path目录下发布(注意:必须是绝对路径,在4.x版本中默认的路径是__dirname + '/dist/')

          __dirname : 文件所在的位置

          process.cwd() : 指令执行是的位置

    运行 webpack 即可发布,4.0中默认发布到dist目录下。

    单个入口文件:

    多个入口文件:

     

    webpack服务器

    webpack没有内置服务器,我们需要安装webapck-dev-server模块

    跟webpack一样,提供了webapck-dev-server指令,所以要安装两次:全局安装,本地安装

      全局安装:npm install webpack-dev-server -g

      本地安装:npm install webpack-dev-server

    安装完成,通过webapck-dev-server -v查看版本号

    进入项目,输入webpack-dev-server即可启动服务器

    当我们保存代码的时候,浏览器会自动刷新

    启动服务器时,发布的文件地址写绝对路径

    默认启动8080端口号,如果8080端口号被占用,webapck-dev-server端口号会自动加1

    注意:webpack-dev-server不支持post请求

    webpack-dev-server --port 端口号 指令:可以修改端口号

    webpack --config "所在路径" 指令:如果webpack.config.js文件不在根目录可以使用这个指令

    webpack -w 指令: 该指令可以实现实时监听文件打包更新(不能监听配置改变)

    webpack -d 指令:将发布后的文件显示为源代码,方便自己检测

    跨域请求代理

    在本地开发中可以使用线上的数据。

    webpack-dev-server支持跨域请求代理技术:

    通过devServer配置项,定义webpack-dev-server的配置

    port 定义端口,

    host 定义域名,

    open 是否自动打开浏览器

    proxy 定义跨域请求代理

      key 表示代理的请求

      value 表示代理的配置对象

        target 表示目标地址

        pathRewrite 表示是否重写路径

        secure 是否对https协议校验。

    css文件加载机

    webpack中一切资源都要模块化加载,css文件也是资源,所以也要模块化加载

    webpack仅仅内置了对js资源的模块化加载,并没有实现对css资源的模块化加载,所以我们要安装css资源加载机(器)

    在webpack与模块相关的配置,定义在module配置中,

    加载机是加载模块的,所以定义在module配置中,通过rules属性配置加载机

      rules属性值是数组,每一个成员代表一个加载机对象

        test 表示资源特征(是正则)

        loader 引入加载机的

          css资源需要两个加载机:style-loader, css-loader

      当引入多个加载机的时候,我们用!级联。使用加载机要本地安装

      有多个加载机,可以使用use单独配置,use属性值为数组

    图片加载机

    在webpack看来图片文件也是资源,也可以模块化加载,我们要安装图片加载机,实现图片模块化加载

    图片文件需要引入图片加载机:url-loader (url-loader依赖file-loader),所以都需要本地安装。

    图片加载有两种方式

      同步加载:将图片写入js文件中,通过html5中,图片的base64编码技术实现的

      异步加载:存储图片的地址,在使用图片时候,在异步加载图片

    图片到底采用哪种方式,我们可以通过传递limit参数定义,值表示图片大小,单位是字节(b)

    加载机通过query形式传递参数:

      例如 url-loader?limit=1024 * 4当图片大小小于等于4kb的时候,同步加载。当图片大小大于4kb的时候,异步加载

     

    字体图标加载机

    压缩 js

    通过设置mode模式来压缩js代码:

      production: 作为产品发布,代码压缩

      development: 作为开发项目,代码不压缩

    ES Module

    ES Module是在ES6中提出的,但是被纳入了ES2016( ES7 )中。

    引入模块:通过import引入

      import * as M from "接口地址"   引入所有的接口,并存储在M命名空间下

      import {} from "接口地址"   引入某些接口(解构),可以直接使用解构的接口

      import M from "接口地址"   引入默认接口

      css资源可以直接通过import引入, import "css地址"

    暴露接口:通过export或者export default暴露

      export 暴露接口,可以被前两种引入接口的方式引入。

      export default 暴露默认接口,可以被第三种引入接口的方式引入。

    编译ES6 | ES7也需要加载机:babel-loader 编译器 @babel/presets-es2015, @babel/presets-env

    webpack  4.x版本可以编译ES6和ES Module,不需要配置加载机,在之前需要

  • 相关阅读:
    JFinal Web开发学习(二)目录、架构、package设计
    JFinal Web开发学习(一)开启HelloWorld
    使用JFinal实现使用MVC获取表单中的数据并将提示信息返回给另一jsp页面。
    [JSOI2010]满汉全席 -- 2-SAT
    [HNOI/AHOI2018] 道路
    ZJOI2006 物流运输
    HNOI2005 狡猾的商人
    打上标记(给树)
    hdu-6201
    Wannfly day2 采蘑菇
  • 原文地址:https://www.cnblogs.com/yess/p/14787329.html
Copyright © 2011-2022 走看看