[初级]webpack4基本操作(一)

矮人狙击手
• 阅读 2928

前言

这篇文章是本人根据gitchat上面的文章学习总结的,针对webpack4做了修改,各位看官可以直接移步原文,讲的更为详细一些
当然,如果只是想要快速入门并跳过一些webpack4的坑的话,可以看下这篇文章,20分钟足够

构建一个最基础的项目

[初级]webpack4基本操作(一)

app.js: 入口文件,webpack会加载其中所有的依赖(require,import的内容)
module.js: 模块文件,在app.js中间使用
compiled.js: 编译过的项目文件,我们在index.html中引用

首先,我们需要一个页面index.html:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Document</title>
  <script src="dist/compiled.js"></script>
</head>
<body>

</body>
</html>

我们创建一个app.js

import log from "./module.js"
document.write("app was loaded!")
log()

以及module.js

export default  function(){
  document.write("module has been loaded!")
}
我们还需要在目录下建一个dist文件夹,用来存放我们编译后的文件

写好以后,我们还需要写webpack配置文件,新建webpack.config.js:

const path = require("path")

module.exports= {
  entry: "./app.js",
  output:{
    path: path.join(__dirname,"dist"),
    filename: "compiled.js"
  },
  mode: "development" 
}
entry: 入口文件,可以有多个,webpack会根据每个入口文件来打包
output: 出口文件,path为文件路径
mode: webpack4新增的选项,production/development两种模式适应不同场景

这里有mode详细的解释
写好了之后,我们全局安装一下webpack

npm i -g webpack

然后在命令行运行

webpack

打开我们的index.html,就可以看到网页了

热加载网页

当我们开发的时候也希望保存文件就可以看到效果吧?
使用一个热门框架webpack-dev-server可以做到这一点:

npm i -g webpack-dev-server

安装完以后,我们还需要在webpack.config.js中修改一下:

const path = require("path")

module.exports= {
  entry: "./app.js",
  output:{
    path: path.join(__dirname,"dist"),
    filename: "compiled.js"
  },
  devServer:{
      port: 3000,
      publicPath: "/dist/"
  },
  mode: "development"
}
port: 端口名
publicPath: 需要加载外部资源的文件路径,我们这里先注释一下

现在运行webpack-dev-server,打开localhost:3000,就可以看到我们的页面了
修改app.js 或者 module.js,保存以后可以实时看到结果.

异步的代码

我们也可以修改我们的代码,让webpack支持异步的代码:
webpack.config.js:

const path = require("path")

module.exports= {
  entry: "./app.js",
  output:{
    path: path.join(__dirname,"dist"),
    publicPath: "./dist/",
    filename: "compiled.js"
  },
  devServer:{
      port: 3000,
      publicPath: "/dist/"
  },
  mode: "development"
}

这里我们添加了output中的oublicPath,这里是输出文件的路径,如果没有的话使用异步代码会报错

app.js:

import log from "./module.js"
import('./async.js').then(module=>{
    module.log()
}).catch(err=>{throw new Error("An error happend!:"+err)})
document.write("app was loaded!")
log()

我们使用类似promise语法的方式来处理异步请求
async.js:

export const log = function(){
    console.log("I'm async")
}

如果运行了webpack-dev-server,那么你应该看到结果了,如果没有的话运行webpack就能看到了
[初级]webpack4基本操作(一)

样式相关

我们在开发需求中需要样式,webpack使用动态生成的方式将我们的样式内嵌到页面文件当中
新建index.css

body{
    padding: 200px;
    text-align: center;
    color: white;
    background-color: #666
}

然后在app.js中导入:

import './index.css'

这时,我们的样式就导入进去了。但是webpack并没有内置任何的载入器,我们需要手动下载和配置(其实强烈推荐yarn)

npm i css-loader --save-dev
npm i style-loader --save-dev

我们再在webpack.config.js中加上:

module:{
    rules: [
      {
          test: /\.css$/,
          loader: 'style-loader!css-loader'
      }
    ]
  }

这是webpack4的写法,所有的模组都装在这里面,增加易读性
其中loader的解析顺序是从右到左,和我们的阅读顺序相反。
[初级]webpack4基本操作(一)

资源压缩

常用的有我们的uglify插件

npm i uglifyjs-webpack-plugin --save-dev

然后在我们的webpack里面引用:

const uglify = require("uglifyjs-webpack-plugin")

plugins: [
    new uglify()     
  ]

记得要加逗号哦,保存完了webpack一下
我们打开compiled.js,发现是这样的:
[初级]webpack4基本操作(一)
这样可以减少我们代码的体积,当然,易读性就不存在了

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Wesley13 Wesley13
3年前
java转大数据的学习路线(转)
首先这个文章是转载的,留着后面基础再扎实一点之后开始学习,感谢原文的作者,写出了如此清晰的学习路线。原文作者文章链接:https://blog.csdn.net/gitchat/article/details/78341484(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fblog.c
喷火龙 喷火龙
4年前
40个Java多线程问题总结
前言Java多线程分类中写了21篇多线程的文章,21篇文章的内容很多,个人认为,学习,内容越多、越杂的知识,越需要进行深刻的总结,这样才能记忆深刻,将知识变成自己的。这篇文章主要是对多线程的问题进行总结的,因此罗列了40个多线程的问题。这些多
Karen110 Karen110
3年前
​一篇文章总结一下Python库中关于时间的常见操作
前言本次来总结一下关于Python时间的相关操作,有一个有趣的问题。如果你的业务用不到时间相关的操作,你的业务基本上会一直用不到。但是如果你的业务一旦用到了时间操作,你就会发现,淦,到处都是时间操作。。。所以思来想去,还是总结一下吧,本次会采用类型注解方式。time包importtime时间戳从1970年1月1日00:00:00标准时区诞生到现在
Wesley13 Wesley13
3年前
Ubuntu 编译ffmpeg 实现GPU 转码
  前言,公司转码集群服务器资源有限,需要考虑GPU方案,本文记录下整个实现ffmpeggpu转码的过程。       该文章后续仍在不断的更新修改中,请移步到原文地址http://dmwan.cc(https://www.oschina.net/action/GoToLink?urlhttp%3A%2F%2Fdmwan.cc)环
Wesley13 Wesley13
3年前
Android 4.4 Kitkat 使能 USB adb 功能
背景在Linux3.8以后,Android的内核分支,便去掉了f\_adb,改使用USBfunctionFS,在用户空间实现USBadb功能。这篇文章根据原作者的Google文章,在Atmelsama5开发板上做了测试,将步骤记录如下,供需要使用的读者参考,你也可以查看作者原文:https://plus
Stella981 Stella981
3年前
Docker 部署SpringBoot项目不香吗?
  公众号改版后文章乱序推荐,希望你可以点击上方“Java进阶架构师”,点击右上角,将我们设为★“星标”!这样才不会错过每日进阶架构文章呀。  !(http://dingyue.ws.126.net/2020/0920/b00fbfc7j00qgy5xy002kd200qo00hsg00it00cj.jpg)  2
Easter79 Easter79
3年前
The way of Webpack learning (VI.)
使用commonChunkPlugin的都是基于webpack3.10.0,在webpack4中直接配置optimization就可以了。一:什么是长缓存?浏览器在用户访问页面的时候,为了加快加载速度,对用户请求的静态资源都会进行存储,但是每次代码更新或者升级的时候,我们都需要浏览器去加载新的代码。最方便的方法就是引入新的文件名称,只下载新的
Wesley13 Wesley13
3年前
virtualbox 双网卡设置
此文章不是本人研究出来的结果,仅仅是转发。。本人配置网络时,发现了很多文章,大多是天下文章一大抄,基本上效果不佳,要么就是语焉不详。这个文章文字精简,内容简单,易于理解,最重要的是好用。。原文地址:http://www.linuxidc.com/Linux/201502/112986.htm(https://www.oschina.net/acti
Wesley13 Wesley13
3年前
Java入门系列
这篇文章为你搞懂2个问题1.什么是数组,数组是干嘛用的?2.数组如何使用?考试结束后,老师给二狗安排了一项任务,统计班里40名同学的平均分。按照我们之前的做法,我们可以定义40个变量然后再相加除以40求出平均分,但是这样太繁琐了,有没有更好的办法呢?那就是使用数组。数组数组其实也是一个变量,顾名思义存储了一组相同类型的
美凌格栋栋酱 美凌格栋栋酱
5个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(