当前位置: 首页 > news >正文

webpack4入门

前提

  • 已安装node(版本号>4.0,已自带NPM)
  • mac机器
  • 有一个空目录

无webpack.config.js配置打包

  1. 快速构建package.json文件。
    npm init -y

  2. 安装webpack4及其命令行接口
    npm i webpack webpack-cli --save-dev

  3. package.json文件增加build参数
"scripts": {
  "build": "webpack"
}
  1. 创建./src/index.js文件
    增加内容
console.log(`这是入口文件`);
  1. 终端执行npm run build
    目录下多了一个./dist/main.js
    这个文件是webpack./src/index.js的打包结果。

productiondevelopment模式

  1. 修改package.json文件的scripts字段
"scripts": {
  "dev": "webpack --mode development",
  "build": "webpack --mode production"
}
  1. 分别执行npm run devnpm run build
    你会看到./dist/main.js不同的变化。
    production模式下,默认对打包的进行minification(文件压缩),Tree Shaking(只导入有用代码),scope hoisting(作用域提升)等等操作。
    总之是让打包文件更小。
    development模式下,对打包文件不压缩,同时打包速度更快。

如果没指定任何模式,默认是production模式。

ES6和React

  1. 安装对应依赖包
    npm i babel-core babel-loader babel-preset-env react react-dom babel-preset-react --save-dev

  2. 新建.babelrc文件,进行相关配置
{
  "presets": ["env", "react"]
}
  1. 新建webpack.config.js文件,进行相关配置
module.exports = {
  module: {
    rules: [
      {
        test: /\.js$/,
        exclude: /node_modules/,
        use: {
          loader: "babel-loader"
        }
      }
    ]
  }
};
  1. 新增./src/app.js以及修改./src/index.js
    ./src/app.js内容如下:
import React from "react";
import ReactDOM from "react-dom";
const App = () => {
  return (
    <div>
      <p>React here!</p>
    </div>
  );
};
export default App;
ReactDOM.render(<App />, document.getElementById("app"));

./src/index.js内容如下:

import App from "./App";
  1. 终端执行npm run build

使用html-webpack-plugin插件对html进行打包

新建./src/index.html文件,内容如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <title>webpack4入门</title>
</head>
<body>
    <div id="app">
    </div>
</body>
</html>

安装依赖包。

npm i html-webpack-plugin html-loader --save-dev

修改webpack.config.js配置。

const HtmlWebPackPlugin = require("html-webpack-plugin");
module.exports = {
  module: {
    rules: [
      {
        test: /\.js$/,
        exclude: /node_modules/,
        use: {
          loader: "babel-loader"
        }
      },
      {
        test: /\.html$/,
        use: [
          {
            loader: "html-loader",
            options: { minimize: true }
          }
        ]
      }
    ]
  },
  plugins: [
    new HtmlWebPackPlugin({
      template: "./src/index.html",
      filename: "./index.html"
    })
  ]
};

终端执行npm run build命令。
你会看到项目多了个./dist/index.html文件。

使用webpack-dev-server插件

安装依赖包。
npm i webpack-dev-server --save-dev

修改package.json文件。

"scripts": {
  "start": "webpack-dev-server --mode development --open",
  "build": "webpack --mode production"
}

修改webpack.config.js文件,新增devServer配置。

devServer: {
    contentBase: require('path').join(__dirname, "dist"),
    compress: true,
    port: 8033,
    host: "127.0.0.1",
}

终端执行npm run start便可以启动webpack dev server

使用Hot Module Replacement

Hot Module Replacement有针对React,Vue,Redux,Angular,样式等等。
这里我们以React Hot Loader为例。

安装依赖包。

npm i react-hot-loader --save-dev

修改.babelrc文件,新增plugins选项。

{
  "plugins": ["react-hot-loader/babel"]
}

修改webpack.config.js文件。

const path = require('path');
const HtmlWebPackPlugin = require("html-webpack-plugin");  
const webpack = require('webpack'); // 新增
module.exports = {
    module: {
        rules: [
            {
                test: /\.js$/,
                exclude: /node_modules/,
                use: {
                    loader: "babel-loader"
                }
            },
            {
                test: /\.html$/,
                use: [
                    {
                        loader: "html-loader",
                        options: { minimize: true }
                    }
                ]
            }
        ]
    },
    devtool: 'inline-source-map',
    plugins: [
        new HtmlWebPackPlugin({
            template: "./src/index.html",
            filename: "./index.html"
        }),
        new webpack.NamedModulesPlugin(), // 新增
        new webpack.HotModuleReplacementPlugin() //新增
    ],
    devServer: {
        contentBase: path.join(__dirname, "dist"),
        compress: true,
        port: 8033,
        host: "127.0.0.1",
        hot: true // 新增
    }
};

修改./src/app.js文件内容如下:

import React from "react";
import ReactDOM from "react-dom";
import { hot } from 'react-hot-loader' // 新增

const App = () => {
  return (
    <div>
      <p>这是一个测试文件!真得是动态更新啊</p>
      <div>好棒棒啊</div>
    </div>
  );
};
export default hot(module)(App); // 修改
ReactDOM.render(<App />, document.getElementById("app"));

终端执行npm run start便可以启动webpack dev server
然后修改./src/app.js看下效果。

参考

https://www.valentinog.com/blog/webpack-4-tutorial/

转载于:https://www.cnblogs.com/samwu/p/8545161.html

相关文章:

  • SSM-Spring-17:Spring中aspectJ注解版
  • 前端Sass回顾以及Compass入门小记
  • ArchSummit2018深圳站筹备中,18大专题征集演讲嘉宾
  • Netty(十八)(中级篇)心跳连接
  • Android7.0以后跨应用
  • 手机零部件下半年持续缺货 供应商涨价趋势加剧
  • 1005. 继续(3n+1)猜想 (25)
  • [UWP小白日记-1]判断APP是否是第一次运行初始化SQLITE数据库
  • 微服务的4个设计原则和19个解决方案
  • 阿里云Redis开发规范
  • SEMI-PARAMETRIC TOPOLOGICAL MEMORY FOR NAVIGATION
  • StringUtils方法
  • java自定义注解
  • 排序算法之--选择排序
  • Shell脚本(2)-if语句
  • JS 中的深拷贝与浅拷贝
  • [NodeJS] 关于Buffer
  • 【翻译】Mashape是如何管理15000个API和微服务的(三)
  • android百种动画侧滑库、步骤视图、TextView效果、社交、搜房、K线图等源码
  • iOS | NSProxy
  • js作用域和this的理解
  • 编写符合Python风格的对象
  • 不发不行!Netty集成文字图片聊天室外加TCP/IP软硬件通信
  • 程序员最讨厌的9句话,你可有补充?
  • 关于Android中设置闹钟的相对比较完善的解决方案
  • 今年的LC3大会没了?
  • 开发了一款写作软件(OSX,Windows),附带Electron开发指南
  • 看图轻松理解数据结构与算法系列(基于数组的栈)
  • 普通函数和构造函数的区别
  • 前端临床手札——文件上传
  • 深入浅出webpack学习(1)--核心概念
  • 一个完整Java Web项目背后的密码
  • 用简单代码看卷积组块发展
  • 字符串匹配基础上
  • 400多位云计算专家和开发者,加入了同一个组织 ...
  • CMake 入门1/5:基于阿里云 ECS搭建体验环境
  • #if 1...#endif
  • #QT(串口助手-界面)
  • (1)(1.19) TeraRanger One/EVO测距仪
  • (done) ROC曲线 和 AUC值 分别是什么?
  • (zt)基于Facebook和Flash平台的应用架构解析
  • (附源码)计算机毕业设计高校学生选课系统
  • (译) 函数式 JS #1:简介
  • (原)Matlab的svmtrain和svmclassify
  • (转)程序员疫苗:代码注入
  • (转)负载均衡,回话保持,cookie
  • ***详解账号泄露:全球约1亿用户已泄露
  • .bat批处理(五):遍历指定目录下资源文件并更新
  • .NET Core引入性能分析引导优化
  • .net 逐行读取大文本文件_如何使用 Java 灵活读取 Excel 内容 ?
  • .net/c# memcached 获取所有缓存键(keys)
  • .net6Api后台+uniapp导出Excel
  • .Net环境下的缓存技术介绍
  • @ModelAttribute使用详解
  • [C++]模板与STL简介