学习webpack4 - 基础配置

news/2024/7/3 15:02:45 标签: webpack, json

学习webpack4 - 基础配置
学习webpack4 - HTML处理
学习webpack4 - 样式处理
学习webpack4 - ES6语法转化
学习webpack4 - 第三方库的使用
学习webpack4 - 抽离公共代码

=======================================================

基础配置

安装

yarn init -y 初始化项目
yarn add webpack webpack-cli -D

尝试运行

step1: 新建src目录, 在src目录下新增一个index.js文件,并输入:console.log('丸子');
step2: 打开package.json文件,添加一个脚本:

"scripts": {
   "build": "webpack"
 }

尝试运行一次:

npm run build

clipboard.png

打包成功了!当前目录结构为:

clipboard.png

当前目录中并没有webpack.config.js这个文件却还能打包成功?因为在webpack4中不必一定要有配置文件了,也不必一定要指定一个入口和出口才能打包成功。它会默认找到./src/index.js 作为默认入口点并且在 ./dist/main.js 中输出模块包,但是这样不是很灵活,因为名字之类的都指定了,那么怎么自己配置这些东西呢?

入口&出口配置

step1: 根目录下新建一个webpack.config.js文件
step2: 打开webpack.config.js文件,进行入口和出口配置:

let path = require('path');

module.exports = {
  entry: './src/index.js',
  output: {
    filename: 'bundle.js',
    path: path.resovle(__dirname, 'dist')
  }
}

尝试运行一下:npm run build

clipboard.png

运行成功了。

当前目录结构为:

clipboard.png

两个配置:

  1. entry: 入口配置
    用来指定入口起点,默认./src,进入入口起点后,webpack会找出有哪些模块和库是入口起点直接和间接依赖的。
  2. output: 出口配置
    用来指定在哪里输出所创建的bundles,默认./dist,其中:

    • filename: 输出文件名称
    • path: 输出文件存放路径,该路径是绝对路径

上面结果中还看到有一个warning说mode没有设置,这个mode是模式,接下来配置下这个mode

多入口和多出口配置

module.exports = {
  //...

  // 多入口和多出口配置
  entry: {
    home: './src/index.js',
    other: './src/other.js'
  },
  output: {
    filename: '[name].js',
    path: path.resolve(__dirname, 'dist')
  },

  //...
}

这样就完成了多入口和多出口的配置,但是编译出的文件需要自动生成相应的html并且引入对应的js文件的时候改怎么处理呢?用chunks去区分,如下:

let HtmlWebpackPlugin = require('html-webpack-plugin')

module.exports = {
  //...

  // 多入口和多出口配置
  entry: {
    home: './src/index.js',
    other: './src/other.js'
  },
  output: {
    filename: '[name].js',
    path: path.resolve(__dirname, 'dist')
  },

  //插件配置
  plugins: [
    new HtmlWebpackPlugin({
      template: './src/index.html', //原始文件
      filename: 'index.html', //打包后的文件名称
      hash: true, //hash
      chunks: ['home']  //引入需要的那个对应的js的文件(多入口时用)
    }),
    new HtmlWebpackPlugin({
      template: './src/other.html', 
      filename: 'other.html',
      hash: true, //hash
      chunks: ['other'] 
    })
  ]
  //...
}

这样就保证了编译后自动生成html文件能正确引用生成的js文件。

模式配置

mode(模式):分别是production(生产) 和 development(开发) 模式

方法一:打开webpack.config.js文件,配置mode

clipboard.png

方法二:打开package.json文件,配置脚本

clipboard.png

尝试运行,

npm run dev  //开发环境
npm run build //生产环境

警告消失,结果如下:

clipboard.png

watch监控

项目中如果我们代码有改动,webpack就会实时监控并编译的话,开发就会舒服的多,实现方法如下:

module.exports = {
  //...

   //监控配置
  watch: true,
  watchOptions: {
    poll: 1000, //每秒钟询问多少次
    aggregateTimeout: 500, //防抖
    ignored: /node_modules/ //忽略不需要监控的
  },
  
  //...
}

(补充)启动本地服务

在本地开发的时候, 总是要自己在浏览器中打开文件,这样很不好, 那么怎么在本地开一个服务呢?
step1: 安装webpack-dev-server

yarn add webpack-dev-server -D

step2: 打开webpack.config.js文件,配置webServer

devServer: {
  port: 3000, //端口号
  progress: true, //进度条
  contentBase: './dist', //指定目录运行服务
  open: true //自动打开浏览器
}

clipboard.png

step3: 打开package.json文件,更改下脚本

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

尝试运行:

npm run dev

成功!结果如下:

clipboard.png

此时浏览器会自动打开 http://localhost:3000/
clipboard.png


http://www.niftyadmin.cn/n/734179.html

相关文章

ApacheCN 翻译活动进度公告 2019.2.18

【主页】 apachecn.org 【Github】ApacheCN 暂时下线: 社区 暂时下线: cwiki 知识库 自媒体平台 微博:ApacheCN知乎:ApacheCNCSDN简书OSChina博客园我们不是 Apache 的官方组织/机构/团体,只是 Apache 技术栈(以及 AI&#xff09…

LWN: kmalloc( )确保对齐

点击上方蓝色字关注我们~Alignment guarantees for kmalloc()By Jonathan CorbetMay 8, 2019LSFMMkmalloc()是kernel里最基础的内存分配API,用于针对较小的对象分配内存。通常,开发者不用操心返回的memory是否有对齐(alignment)问…

swiper轮播图

<!-- 轮播图 --><div class"swiper-container swiper1"><div class"swiper-wrapper"><div class"swiper-slide"><img src"./images/0.jpg" alt""></div><div class"swiper-sli…

LWN: 配置lockdown security module

点击上方蓝色字关注我们~Lockdown as a security moduleBy Jonathan CorbetJune 24, 2019像UEFI secure boot&#xff08;安全引导&#xff09;这一类的技术&#xff0c;目的都是为了保证运行的系统软件是发布者指定的版本&#xff08;这里定义一下发布者&#xff0c;是指firmw…

es6 -- 默认参数Default,不定参数Rest,扩展运算符Spread详解

欢迎访问我的个人博客&#xff1a;http://www.xiaolongwu.cn 前言 记录一下在实际开发中&#xff0c;很有用的三个es6的新方法 用法详解 默认参数 function f(x, y13) {// 如果没有传入y或传入了undefined&#xff0c;y的默认值为13return x y; } f(5) // 18 不定参数Rest 不定…

tab选项卡联动swiper轮播图

function tabs(obj, swiperObj, className, index) {var tabSwiper new Swiper(swiperObj, {initialSlide: index, // 设定初始化时slide的索引speed: 500, //滑动速度&#xff0c;单位ms// autoHeight: true, //高度随内容变化onSlideChangeStart: function() {if (tabSwiper…

H5页面调用原生方法返回

var userAgent navigator.userAgent.toLowerCase(); // 调用原生方法返回 function back() {if (equipment(iphone)) {naviBack({ isRefresh: 0, callBack: isRefresh() });} else if (equipment(ipad)) {naviBack({ isRefresh: 0, callBack: isRefresh() });} else if(equipm…

LWN: FreeBSD已经26周年啦!

点击上方蓝色字关注我们~FreeBSD turns 26June 21, 2019This article was contributed by Sean KernerFreeBSD在创建之后&#xff0c;已经活跃开发了26年了。目前活跃开发的领域包括RISC-V处理器支持&#xff0c;FUSE文件系统的更新&#xff0c;C运行时库的改动&#xff0c;以及…