使用webpack 4打包项目---基础篇

webpack 4打包项目—基础篇

全局安装webpack4

npm i webpack -g
npm i webpack-cli -g

webpack4在安装时跟3不一样 ,还需要安装一个webpack-cli

打包项目

例如:打包一个文件,这个文件依赖了jQuery

npm  init -y //初始化一个项目
npm i jquery  // jquery依赖
npm i webpack webpack-cli -D //在项目中安装webpack依赖

一个简单的隔行变色案例

目录结构如下

在这里插入图片描述

index.html

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script  src="main.js"></script>
</head>

main.js模块

import $ from 'jquery'

$(function() {
    $('li:odd').css('backgroundColor','aqua')
    $('li:even').css('backgroundColor','white')
})

如果这里我们不打包的话 在浏览器里面直接运行会报错,浏览器中不能直接使用import加载包,使用webpack 能解决这个问题,当然这个只是一点用处,最关键的是他能把网站中的静态资源做一个整合打包,减少这个请求的次数等等。

接下来说一下基础用法

我们需要把main.js 打包, 以下均为webpack 4写法

webpack ./src/main.js -o /dist/bundle.js 

这行命令的作用是打包main.js文件,并把打包好的文件存储到dist目录中的bundle.js(会自动创建这个文件,名称是自定义的)文件中。

这样我们在index.html中 src改为 的bundle.js就行了

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script  src="../dist/bundle.js"></script>
</head>

这样我们这个就打包好了,但是我们的main.js文件,每改变一次都需要我们重新敲那么长的命令,那有没有方法能够简化这个命令呢?答案是肯定的。

这个需要我们在项目根路径下创建一个文件webpack.config.js并在文件中配置如下,这个模块是基于node的

const path = require('path')
module.exports = {
    entry: path.join(__dirname, './src/main.js'), //入口
    output: {
        path: path.join(__dirname, './dist'), //输出
        filename: 'bundle.js'
    },
    mode:'development'
}

这样我们每次重新打包的时候,只需要输入webpack就行了,省去了打包文件和存入文件。

webpack-dev-server

然而这样还是会感觉很麻烦,每改变一次都需要我们手动重新打包才行,因此我们用到了webpack的一个包webpack-dev-server可以自动编译打包。

在项目中安装webpack-dev-server

npm i webpack-dev-server -D

这个包就类似于node 中的 nodemon 自动编译打包。

由于这个包并不是全局安装的,因此我们需要在package.json中配置如下

  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "dev":"webpack-dev-server"
  },

然后我们直接npm run dev就可以了,这个就可以启动了,默认是访问http://localhost:8080得到下图

在这里插入图片描述
点击src就能进入我们的主界面。

但是你会发现这个虽然每次保存都会编译打包,但是这个界面却没有任何变化,样式并没有生效,这又是怎么回事呢? 其实经过这一通操作之后,在我们的根目录下的内存中生成了一个bundle.js文件,它并没存到磁盘上,因此我们看不见,因为我们这个文件需要反复的编译打包,因此并不适合存到磁盘上,而是存储到了内存中,因此我们这个index.html中引入的时候需要改成如下

    <script  src="/bundle.js"></script>

这样就相当于我们引入的内存中的bundle.js,就ok了。

webpack-dev-server 的命令参数

但是呢,我们发现当我们启动webpack还得需要自己手动点击这个http://loaclhost:8080这个链接才行,那有没有办法使操作更简便呢?

//默认启动
webpack-dev-server --open  
//更换为 3000端口号 
webpack-dev-server --port 3000
// 默认根路径
webpack-dev-server --contentBase src
//热更新 --相当于局部更新bundle里面的内容,还有就是无刷新更新页面,这个主要是针对css样式的,对js无作用
webpack-dev-server --hot 

其实这个还有另一种写法,在配置文件中配置

webpack-config.js文件

const path = require('path')
module.exports = {
    entry: path.join(__dirname, './src/main.js'),
    output: {
        path: path.join(__dirname, './dist'),
        filename: 'bundle.js'
    },
    mode:'development',
+   devServer: {
+       open: true,
+       port: 3000,
+       contentBase: 'src',
+       hot: true
+   }
}

这样的话也可以实现第一种效果,我们的一些基本需求也就ok了。

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值