• 还不打算去认识一下webpack?


    前言

    随我来,去看看webpack!(为时未晚)============》第一版(较浅显的知识,懂得可忽略本文)

    方向

    1. 安装,起步搭建运行. (粗略代过)
    2. 对于资源的管理,对于输出的管理. (举例介绍)
    3. 本地开发 (基础服务)
    4. 热更新=[模块热替换] (初步认识)

    1.初步构建

    mkdir webpack_demo && cd webpack_demo   // 新建一个文件 并进入更目录 `mkdir 是linux命令`
    npm init -y   // 初始一个packjage.json文件  -y 表示跳过询问步骤...
    
    
    //安装webpack
    npm install webpack --save-dev  // 添加webpack-cli依赖到"devDependencies"
    //webpack4.0+ 需要安装webpack-cli
     npm install webpack-cli --save-dev  // 添加webpack-cli依赖到"devDependencies"  
     
    </pre>
    
    

    //生成如下目录
    ├── package.json
    ├── src //源目录(输入目录)
    │   ├── index.js
    ├── dist // 输出目录
    │   ├── index.html

    // 修改 `dist/index.html`
    &lt; !DOCTYPE html&gt;
    &lt;html lang="en"&gt;
        &lt;head&gt;
            &lt;meta charset="UTF-8"&gt;
            &lt;title&gt;webpack_demo&lt;/title&gt;
        &lt;/head&gt;
        &lt;body&gt;
                &lt;script src="main.js"&gt;&lt;/script&gt;   //为什么是main.js下面会解释
        &lt;/body&gt;
    &lt;/html&gt;
    
    //修改`src/index.js    `
     function component() {
       var element = document.createElement('div');
         element.innerHTML = "整一个盒子"
         return element;
      }
    
      document.body.appendChild(component());</pre>
    <blockquote>
    <code> npx webpack</code> (Node 8.2+ 版本提供的 npx 命令) <br><code>node node_modules/.bin/webpack</code> (8.2-版本)</blockquote>
    <h5>会将我们的脚本作为<code>入口起点</code>,然后 输出 为 <code>main.js</code>.</h5>
    <blockquote>
    <code>打开dist/index.html  你将会看到 </code>整一个盒子<code> 几个字样~</code>
    </blockquote>
    <h3>2.资源管理,输出管理.基本开发起步</h3>
    
    

    //生成如下目录
    ├── package.json

    • |── webpack.config.js //webpack配置文件
      ├── src //源目录(输入目录)
      │   ├── index.js
      ├── dist // 输出目录
      │   ├── index.html
    先介绍一个Lodash库 它是一个一致性、模块化、高性能的 JavaScript 实用工具库 模块化处理非常适合值操作和检测(说白了就是webpack用了我也试试...)
    lodash相关文档

    npm install lodash --save //非仅在开发的时候使用的依赖 就是需要打包到生产环境的包 不加-dev

    
    // src/index.js
    import _ from 'lodash';
    
    function component() {
       var element = document.createElement('div');
         element.innerHTML = _.join(['lodash','webpack'],'');   //join将 array 中的所有元素转换为由''分隔的字符串 其它函数可以自己实践
         return element;
     }</pre>
    <blockquote><code>打开index页面输出 loadshwebpack</code></blockquote>
    
    

    //webpack.config.js
    const path = require('path');

    module.exports = {
    entry: './src/index.js', //入口
    output: { //出口
    filename: 'main.js', //打包之后脚本文件名称
    path: path.resolve(__dirname, 'dist') //路径指向执行 js 文件的绝对路径 此处为/dist
    }
    };

    执行npx webpack --config webpack.config.js (把之前dist目录下main.js删除) 新的脚本生成(其实没多大变化..)
    //  配置一下package.json
      "scripts": {
        "test": "echo "Error: no test specified" &amp;&amp; exit 1",
        "build": "webpack"     //添加此行命令 下次执行打包就是 npm  run  build 相当于上面的npx webpack --config webpack.config.js
      },
    
    // 资源的配置 css 图片 js等等.. 举例 css 图片
    </pre>
    <blockquote>
    <code>npm install --save-dev style-loader css-loader</code>   css的loader<br><code>npm install --save-dev file-loader</code>  file(图片)对象的 loader</blockquote>
    
    

    //生成如下目录
    ├── package.json

    • |── webpack.config.js //webpack配置文件
      ├── src //源目录(输入目录)
      │   ├── index.js
    • │   ├── index.css
    • │   ├── icon.jpg
      ├── dist // 输出目录
      │   ├── index.html
    //修改webpack.config.js
        const path = require('path');  //path路径模块
        module.exports = {
          entry: './src/index.js',   //入口
          output: {   //出口
            filename: 'main.js',
            path: path.resolve(__dirname, 'dist')
          },
          module: {
             rules: [
               {
                 test: /.css$/,  //检测正则匹配.css结尾的文件
                 use: [           //使用俩个loader
                   'style-loader', 
                   'css-loader'
                 ]
               },
               {
                 test: /.(png|svg|jpg|gif)$/,  //正则匹配.png svg jpg gif结尾的文件
                 use: [    //使用file-loader
                   'file-loader'
                 ]
               }
             ]
           }
        };
     //修改src/index.css
        div{
            color:red;
        }
    
     //修改src/index.js
         import _ from 'lodash';
         import "./index.css";
         import Icon from './icon.jpg';
        
        
          function component() {
            var element = document.createElement('div');
        
            element.innerHTML = _.join(['loadsh', 'webpack'], ' ');
            var myIcon = new Image();
            myIcon.src = Icon;
        
            element.appendChild(myIcon);
            return element;
          }
        
          document.body.appendChild(component());
    </pre>
    <blockquote>
    <code>npm run build(删除之前的dist目录下main.js)  你会看红字和图片</code>  以上就是资源管理的简短介绍</blockquote>
    <blockquote>
    <code>npm install --save-dev html-webpack-plugin   安装html-webpack-plugin模块</code> 模块用到功能:<br>  1: 动态添加每次compile后 js css 的hash<br>  2:  可配置多页面 单页面 这些 <br>  3: 其它没涉及到<br><code>npm install clean-webpack-plugin --save-dev 清除dist文件夹(每次删除麻烦了..)</code>配置一下</blockquote>
    
    

    //修改目录
    ├── package.json
    |── webpack.config.js //webpack配置文件
    ├── src //源目录(输入目录)

    • │   ├── app.js
    • │   ├── print.js
      │   ├── index.css
      │   ├── icon.jpg
      ├── dist // 输出目录
      │   ├── index.html
    //webpack.config.js  ===============================================
    const path = require('path');
    const HtmlWebpackPlugin = require('html-webpack-plugin');
    const CleanWebpackPlugin = require('clean-webpack-plugin');
    
    module.exports = {
      entry: {
        app: './src/index.js',
        print: './src/print.js'
      },
      output: {
        filename: '[name].bundle.js',
        path: path.resolve(__dirname, 'dist')
      },
      plugins: [
           new CleanWebpackPlugin(['dist']),
         new HtmlWebpackPlugin({
           title: 'webpack_demo'
         })
      ],
      module: {
         rules: [
           {
             test: /.css$/,
             use: [
               'style-loader',
               'css-loader'
             ]
           },
           {
             test: /.(png|svg|jpg|gif)$/,
             use: [
               'file-loader'
             ]
           }
         ]
       }
    };
    
    //修改src/index.js ===================================================
     import _ from 'lodash';   //引入lodash模块
     import "./index.css";     // index.css
     import Icon from './icon.jpg';   // 图片
     import printMe from "./print.js"    // printJS
    
    
      function component() {
        var element = document.createElement('div');  //创建一个元素
    
        element.innerHTML = _.join(['loadsh', 'webpack'], ' ');  // lodash中_.join方法
        var myIcon = new Image(); //创建一个图片
        myIcon.src = Icon;    //src赋值
    
        element.appendChild(myIcon);   //追加图片
    
        var btn = document.createElement('button');  //创建按钮
        btn.innerHTML = 'Click me and check the console!';   //内容赋值
        btn.onclick = printMe;   //添加事件
        element.appendChild(btn);   //追加元素
    
        return element;
      }
    
      document.body.appendChild(component());   //追加元素到body中
      
      //修改src/print.js  ==========================================
      export default function printMe() {
          console.log('from print.js');
      }
     
    
    npm run build 会发现基本webpack的配置之后 ,有点模样(意思)了 打开页面index.html正常访问

    3.本地开发

    npm install --save-dev webpack-dev-server "webpack-dev-server" 为你提供了一个简单的 web 服务器,并且能够实时重新加载
     //修改webpack.config.js
    const path = require('path');
    const HtmlWebpackPlugin = require('html-webpack-plugin');
    const CleanWebpackPlugin = require('clean-webpack-plugin');
    const webpack = require('webpack');
    
    module.exports = {
      entry: {
        app: './src/index.js'
      },
      output: {
        filename: '[name].bundle.js',
        path: path.resolve(__dirname, 'dist')
      },
      devServer: {
         contentBase: './dist'
      },
      plugins: [
           new CleanWebpackPlugin(['dist']),
         new HtmlWebpackPlugin({
           title: 'webpack_demo'
         })
      ],
      module: {
         rules: [
           {
             test: /.css$/,
             use: [
               'style-loader',
               'css-loader'
             ]
           },
           {
             test: /.(png|svg|jpg|gif)$/,
             use: [
               'file-loader'
             ]
           }
         ]
       }
    };
    //修改package.json
    ...
    "scripts": {
        "test": "echo "Error: no test specified" &amp;&amp; exit 1",
        "start": "webpack-dev-server --open", //start命令
        "build": "webpack"
     },
     ...
    
    
    npm run start 本地起了8080端口的服务,你也可以看到自己的页面

    4.热更新

    //修改webpack.config.js
    const path = require('path');
    const HtmlWebpackPlugin = require('html-webpack-plugin');
    const CleanWebpackPlugin = require('clean-webpack-plugin');
    const webpack = require('webpack');
    
    module.exports = {
      entry: {
        app: './src/index.js'
      },
      output: {
        filename: '[name].bundle.js',
        path: path.resolve(__dirname, 'dist')
      },
      devServer: {
         contentBase: './dist',
         hot: true
      },
      plugins: [
           new CleanWebpackPlugin(['dist']),
         new HtmlWebpackPlugin({
           title: 'webpack_demo'
         }),
         new webpack.NamedModulesPlugin(),
         new webpack.HotModuleReplacementPlugin()
      ],
      module: {
         rules: [
           {
             test: /.css$/,
             use: [
               'style-loader',
               'css-loader'
             ]
           },
           {
             test: /.(png|svg|jpg|gif)$/,
             use: [
               'file-loader'
             ]
           }
         ]
       }
    };
    
    
    npm run start 运行http://localhost:8080/ 然后你去修改print js的console(或者添加其他代码) 会发现命令行输出updated. Recompiling... 字样 这就是简单的实现了热更新

    最后

    本文只是大概从几个demo来对于webpack的基础概念 入口entry 出口 output loader plugins mode(没有直面涉及)几大模块的梳理于实践,让大家对于webpack不在那么陌生!

    后续文章会从更深入的角度去学习webpack! 暂定下周1 发表文章(内容 详细介绍hot 实现一个简易的vue-cli等等)

    demo的代码我会同步github

    原文地址:https://segmentfault.com/a/1190000016927436

  • 相关阅读:
    Boost之使用篇(1)
    Lucene 3.0.0细节初窥(1)深入探索Lucene的consumer与processor
    整理一点关于Lucene的学习资料, 方便自己与别人查看
    使用Lucene 3.0.0的结构遍历TokenStream的内容.
    [原创]如何写一个完善的c++异常处理类
    Lucene 3.0.0 的TokenStream与Analyzer
    Lucene 3.0.0 之样例解析(4)IndexFiles.java
    贝叶斯、概率分布与机器学习
    Lucene用c++重写的详细安排
    Lucene 3.0.0的细节初窥(2)研究在索引过程中的缓存
  • 原文地址:https://www.cnblogs.com/lalalagq/p/9921085.html
Copyright © 2020-2023  润新知