zoukankan      html  css  js  c++  java
  • webpack

    命令运行

      ./node_modules/.bin/webpack  

        在 node_modules/.bin 目录下,存放着大量的cmd文件,运行 webpack 命令文件

      package.json (npm 配置文件  npm init 生成)

        scripts:{

          "webpack1" : "./node_modules/.bin/webpack ",

          "webpack2" :"webpack"  //  方式二  与上面是等价的

        }

        npm run webpack2    --->  npm run 命令,处理路径  “./node_modules/.bin” + path

        (scripts中使用  test start  restart  stop 命名,调用的的时候可以省略 “run” ,  即直接   npm start  )

        npm start 构建的文件默认放在  ./dist 目录  (可以通过配置文件更改)

      更直接的方式 npx

        npx webpack   帮助我们我们定位命令到 “./node_modules/.bin” 目录下

        (npm 使用文档   docs.npmjs.com      --->  CLI documentation )  command line interface 使用文档

    webpack及webpack.config.js

      webpack命令在哪个目录下运行,会自动加载目录下的 webpack.config.js 文件;

      webpack --config  指定加载配置文件路径、

      webpack  --help

    loaders; 默认只处理  .js 类型的文件,如 图片 css html 等非js类型的文件需要不同的 loader 来实现 

    plugins: 主要是扩展 webpack 本身的一些功能,它们会运行在各种模块解析完成以后的打包编译阶段,比如文件的压缩等

         特点:  功能的扩展    运行在打包编译阶段  

    webpack.config.js

      const path = require("path");

      module.exports = {  // 抛出一个配置文件

        mode: "development",   --->默认 production

        entry: { aa: "./src/aa.js",  bb: "./src/bb.js" },

        output: {

          path: path.resolve( __dirname, "dist" ),   --> 兼容各操作系统 

          filename: [name]-filename.[hash].js     ---> [ hash ]  [ chunkhash ]  [ name ]  [ id ]  [ query ]

        },

        devtool: "source-map",    // source-map 开启

      }

      模块标识符[ hash] [ id ]       [ chunkhash ]chunk内容hash

      当执行 ./node_modules/.bin/webpack 命令时,自动加载 webpack 配置文件。

       webpack  --config = configFileName

       webpack --mode = development   ( 在 development 模式运行 webpack )

    webpackDevServer:

      代码重新编译打包,刷新浏览器(编译后的代码存在内存中,并虚拟一个地址)  ---> 不直接存在硬盘中,更新比较快

      webpack-dev-server  提供了一个简单的 web server

      npm install --save-dev  webpack-dev-server  

      执行:

        npx webpack-dev-server   -----> 启动 web server

        或 package.json 中 添加 scripts   (并修改  webpack.config.js  --> 添加 devServer)

        module.exports = {

          devServer:{

            contentBase:  "./dist",  // 生成虚拟目标路径

            open: true,  // 自动开启浏览器

            port: 8081,  // 端口

            proxy: {   --> 内置了一个代理服务器,把跨域请求转发目标服务器上

              "/api":{

                target: "http://localhost:8087"

              }

            }

          }    

        }

        启动服务以后,webpack不再会把打包后的文件生成到硬盘真实目录了,而是直接存在了内存中

      (同时虚拟了一个存放目录路径),后期更新编译打包和访问大大提升。

      proxy:  开发环境下,前端开发过程中代码会运行在一个服务器环境下(webpack-dev-server),

         那么在处理一些后端请求的时候常会出现跨域的问题。

         内置了一个代理服务器,把跨域请求转发目标服务器上(webpack-dev-server 内置的代理发送的请求属于后端 node,不受同源策略限制)

     

     HMR  webpack内置插件,热更新  --> Hot Module Replacement  

      不同于 live reload 刷新整个页面,无法保持页面操作状态.。( webpack-dev-server 提供了 live relaod  )

      HMR核心: 局部更新 或 模块更新,不刷新页面, 只更新变化的部分

      (webpack 内置插件)

      module.exports = {

        devServer:{

          contentBase: "/dist",

          open: true,

          port: 8081,

          hot: true,    ---> 开启热更新

          hotOnly: true  // 即使 HMR 不生效,也不刷新整个页面(选择开启)

        },

        plugins:[  new webpack.hotModuleReplacementPlugin()  ]  ----> 实例化插件

      }

    其他热更新:

      css热更新,   style-loader 中已经集成实现了, 我们只需要 use 中使用就可以了

      React热更新    脚手架中集成

      Vue热更新   脚手架中集成

    执行简要流程:

      entry  ---> loaders ---> plugins ---> output

      entry ---> loaders

      loaders ---> plugins

      plugins ---> output  

    Node.js  API

      webpack提供了 Node.js API,可以在 Node.js 运行时直接使用;

      webpack仅仅负责编译的部分;   const webpack = require("webpack");  const compiler = webpack({// 配置 }); ----> 获得一个编译实例

      compiler.run(function( err , stats){

        if( err || stats.hasError()){

          // ...

        }

      })

  • 相关阅读:
    北漂IT男返乡2年的三线楼市观察(宜昌夷陵篇)-原创
    写一本书作者到底能拿到多少稿酬?
    书是如何定价的?
    一本书出版社拿多少,作者拿多少?书的成本几何?出版一本书出版社到底能赚多少钱?(转)
    微服务架构最强详解
    今日头条号短视频自媒体研究---最开始的短视频设备资金投入不要太大(原创)
    今日头条号短视频自媒体研究---新手上路,正确拍短视频并上传(原创)
    HTTP请求中的缓存(cache)机制
    linux kernel 中断子系统之(一)-- ARM GIC 硬件【转】
    嵌入式Linux——kmsg:分析/proc/kmsg文件以及写自己的/proc/mymsg【转】
  • 原文地址:https://www.cnblogs.com/baota/p/12399342.html
Copyright © 2011-2022 走看看