美文网首页
webpack学习笔记

webpack学习笔记

作者: Sniper_Zheng | 来源:发表于2018-12-21 21:45 被阅读7次

    webpack

    新建项目

    webpack-study
    

    cd到项目目录

    npm init  (-f)
    

    全局安装webpack

    npm install webpack -g
    

    在项目本地安装webpack

    npm install webpack -D
    

    打包

    webpack 要打包的文件  打包的输出文件
    

    在项目的根目录下创建webpack.config.js

    // 这个配置文件 其实就是一个js文件 通过node中的 模块 向外暴露一个配置对象
            const path = require('path'),
            module.exports = {
              // 需要指定入口 和 出口
              entry: path.join(__dirname, './src/main.js') // 入口 表示要打包哪个文件
              output: {
                path: path.join(__dirname, './dist'),
                filename: 'bundle.js' // 指定输出的名称
              }
            }
    
    • 运行webpack 发现没入口出口
    • webpack会去项目根目录找webpack.config.js
    • 解析webpack.config.js 获得配置对象
    • 拿到配置对象的入口出口 并打包

    使用webpack-dev-server来实现自动打包编译功能

    • 把工具安装到项目的本地开发依赖
    $ npm install webpack-dev-server -D
    
    • 安装完毕后 这个工具的用法和webpack用法一样
    • 由于,我们是在项目中,本地安装的webpack-dev-server, 所以无法把他当做脚本命令在powershell终端中执行;
      (只有那些 安装到全局 -g的工具, 才能在终端中正常执行)
    • webpack-dev-server 如果想要正常运行, 要求在本地项目中 必须安装webpack(哪怕全局安装了也是,必须本地安装一次)
    • webpack-dev-server 帮我们打包生成的 bundle.js文件, 并没有存放到实际的物理磁盘上, 而是直接托管到了电脑的内存中, 所以在项目根目录中找不到这个打包好的bundle.js
    • 我们可以认为 webpack-dev-server 把打包好的文件, 以一种虚拟的形式, 托管到了项目的根目录中, 虽然看不到它, 但是可以认为 dist src modemodules 平级 有一个看不见的文件叫做bundle.js

    package.json

    "scripts": {
       "test": "echo \"Error : no test specified \" && exit 1",
       "dev": "webpack-dev-server --open --port 3000 --contentBase src --hot"  // 代表自动打开浏览器 端口3000 以src里的index.html为首页 打开  --hot 增量以补丁形式打包进来 并且浏览器无刷新重载
    }
    
    • 写好之后 npm run dev

    把html页面也保存到内存中

    • 安装
    npm install html-webpack-plugin -D
    
    • 在webpack.config.js中引入html-webpack-plugin
    // 只要是插件 都一定要放到plugins节点中去
    const webpack = require('webpack')
    const htmlWebpackPlugin = require('html-webpack-plugin')
    
    • webpack.config.js中的配置插件的节点中 创建一个插件
    plugins: [
      new htmlWebpackPlugin({
        template: path.join(__dirname, './src/index.html'), // 指定模板页面, 将来会根据指定的页面路径,去生成内存中的页面
        filename: 'index.html'  // 设置生存的内存页面的名称
      })
    ]
    
    • 当使用html-webpack-plugin之后, 我们不在需要手动处理bundle.js的引用路径了,因为这个插件已经帮我们自动创建了一个合适的script,并且引用了正确的路径
    • webpack默认只能打包处理js类型的文件, 无法处理其他非JS类型的文件,如果非要处理如CSS的文件,我们需要手动安装一些合适的第三方loader加载器
    // 1. 如果想要打包处理css文件, 需要安装 
    npm install style-loader css-loader -D
    
    // 打开webpack.config.js文件 在里边新增一配置节点module, 它是一个对象, 在这个module对象身上有一个rules属性, 这个rules属性是个数组 这个数组中存放了所有第三方文件的匹配和处理规则.
    module: {
            rules: [
                { test: /\.css$/, use: ['style-loader', 'css-loader'] },  // 配置处理 .css文件的第三方loader规则
                { test: /\.less$/, use: ['style-loader', 'css-loader', 'less-loader'] }, // 配置处理 .less文件的第三方loader规则
                { test: /\.(jpg|png|gif|bmp|jpeg)$/, use: 'url-loader?limit=8192' }, // 配置处理 .jpg .png等图片 因为只有一个loader 不用数组
                // limit给定的值是图片的大小, 单位是byte字节, 如果图片小于limit 则会转为base64, 如果大于等于limit就不会转为base64字符串
            ]
        }
    

    webpack处理第三方文件类型的过程

    1. 发现这个要处理的文件不是JS文件, 然后就去配置文件中查找有没有对应的第三方loader规则.
    2. 如果能找到对应规则, 就会调用对应的loader处理这种文件类型
    3. 在调用loader的时候 从后往前调用
    4. 当最后的一个loader调用完毕, 会把处理的结果, 直接交给webpack 进行打包合并, 最终输出到bundle.js中去

    最后项目的目录应该是这样的

    Screen Shot 2018-12-21 at 9.43.18 PM.png

    相关文章

      网友评论

          本文标题:webpack学习笔记

          本文链接:https://www.haomeiwen.com/subject/qwhykqtx.html