Html5和Webpack2:Webpack5打包JS和样式表

简介: 本实验将介绍通过Webpack5的打包JavaScript脚本和样式表

Html5和Webpack2:Webpack5打包JS和样式表

1.  创建资源

开始实验之前,您需要先创建实验相关资源。

  1. 在实验室页面,单击创建资源
  2. (可选)在实验室页面左侧导航栏中,单击云产品资源列表,可查看本次实验资源相关信息(例如IP地址、子用户信息等)。

说明:资源创建过程需要3~5分钟视资源不同开通时间有所差异,ACK等资源开通时间较长。完成实验资源的创建后,您可以在云产品资源列表查看已创建的资源信息,例如:子用户名称、子用户密码、AK ID、AK Secret、资源中的项目名称等。

实验环境一旦开始创建则进入计时阶段,建议学员先基本了解实验具体的步骤、目的,真正开始做实验时再进行创建。

资源创建成功,可在左侧的资源卡片中查看相关资源信息以及RAM子账号信息

2.  进入VNC实验环境

  1. 进入网页环境

1.1 资源创建成功后,我们在右侧选择切换到远程桌面

1.2 在远程桌面页面中,点击Chromium网页浏览器

  1. 登录RAM用户

2.1 浏览器启动后会默认打开阿里云的RAM用户登录页。在登录页面中我们点击下一步按钮。

2.2 接下来我们需要输入RAM用户的密码。密码显示在实验控制台左侧,我们点击子用户密码右侧的复制按钮。

复制完成后,我们在用户密码框中按Ctrl + V 复制密码,然后点击登录按钮

  1. 进入ECS的远程连接。

3.1 登录成功后,页面跳转到控制台,我们在控制台的搜索框中输入ECS,然后点击云服务器ECS进入云服务器控制台。

3.2 在ECS控制台中,我们找到实验创建的ECS,点击右侧的远程连接按钮。

3.3 在远程连接中选择通过VNC远程连接中的立即登录如果没有显示该选项,则可点击展开其他登录方式按钮。

  1. 登录VNC远程连接

4.1 初次登录VNC远程连接时需要先设置VNC密码。点击重置VNC密码按钮。

4.2 输入两次新的VNC密码,并点击确认

4.3 VNC密码设置成功后,输入密码并点击确认。

4.4 VNC登录成功后会看到实验ECS的登录界面。

3.  实验环境准备

在前面的实验中我们介绍了webpack得配置和编译。通过webpack我们可以将JavaScript代码进行打包,生成新的JavaScript代码。在本节实验中,我们来学习如何利用Webpack5为前端网页打包JavaScript和样式表,以及Webpack的一些常见用法。首先我们来准备实验环境

  1. 创建网页文件

首先我们来创建项目目录,在终端中执行如下命令

mkdir src
mkdir css
mkdri dist

./src目录中创建function.js文件为如下内容

function showMsg(str){
    document.getElementById('resp').outerHTML += '<div>' + str + '<div/>'
}
const README = "模块function.js中函数showMsg的功能: 将str参数的内容添加到id为resp的元素";
export default {showMsg, README}

./src目录中创建conflict.js文件为如下内容

var showMsg = "Hello World";
const README = "模块conflict.js中变量showMsg的内容: 'Hello World'";
module.exports = {showMsg, README}

./src目录中创建index.js文件为如下内容

import func from './function.js'
import conflict from './conflict.js'

./css目录中创建style.css文件为如下内容

button {
  border-radius: 8px;
  padding: 5px 15px;
  margin: 10px;
  font-size: 15px;
  border: 2px solid #777;
}

./css目录中创建color.less文件为如下内容

@dark: #141414;
@light: #f4f4f4;
@defbtn: #3060c0;
@lightbtn: lighten(@defbtn, 20%);
@cancelbtn: #a4a4a4;
.autocolor(@color){
    background-color: @color;
    color: if((hsvsaturation($background-color) > 60%), @light, @dark);
}
body {
    .autocolor(@light);
    button {
        .autocolor(@defbtn);
        &.light {
            .autocolor(@lightbtn);
        }
        &.cancel {
            .autocolor(@cancelbtn);
        }
    }
}

最后在项目根目录创建index.html网页文件。

<!DOCTYPE html>
<html lang="zh-CN">
<link href="./css/style.css" rel="stylesheet/less" type="text/css" />
<script src="./src/function.js"></script>
<script src="./src/conflict.js"></script>
<title>Web dev</title>
<body>
    <div>
        <button class="" onclick="showMsg('click button')">button</button>
        <button class="light" onclick="showMsg('click light button')">light button</button>
        <button class="cancel" onclick="showMsg('click cancel button')">cancel button</button>
    </div>
    <div id="resp">
    </div>
</body> 
</html>
  1. 创建项目配置文件

接下来创建node.js项目和webpack项目的项目文件。在根目录中创建package.json文件为如下内容

{
  "name": "web",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "webpack": "^5.75.0",
    "webpack-cli": "^5.0.1"
  }
}

在根目录创建webpack.config.js文件为如下内容

const path = require('path');
module.exports = {
  mode:'development',
  entry: './src/index.js',
  output: {
    filename: 'main.js',
    path: path.resolve(__dirname, 'dist'),
  },
};
  1. 依赖资源的安装和测试

在node 项目中,安装第三方资源有两种方法,一种是通过npm i 资源名的方式,另一种是在package.json文件的devDependenciesdependencies字段设置要安装的依赖,然后通过npm i命令安装,我们在终端中执行如下命令安装依赖,并测试使用npx webpack命令编译。

npm i
npx webpack

依赖安装完毕后,按F5打开网页,发现css加载完成

4.  打包JavaScript脚本

  1. 将export属性设置到网页

在上一个实验中我们介绍了JavaScript的模块化语法,接下来我们来看如何打包多个JavaScript并在前端网页中使用。没有使用模块化语法之前,所有的JavaScript文件和前端网页中的运行环境在同一个命名空间中,因此前端网页运行环境可以直接调用JavaScript文件中的资源。

但是使用模块化之后,除了每个JavaScript模块都有自己的命名空间,同时前端运行环境也有自己的命名空间window。同时前端运行环境默认不支持import语法,这时我们需要在代码中将模块的导出函数手动复制到前端运行环境的命名空间window中。我们继续修改index.js

import func from './function.js'
import conflict from './conflict.js'
window.func = func
window.conflict = conflict
  1. 打包JavaScript

修改完成后,我们在终端中执行如下命令进行编译和运行。

npx webpack

接下来将index.js中的两个JavaScript文件引用替换为main.js,同时将showMsg的调用修改成func.showMsg,修改index.js为如下内容

<!DOCTYPE html>
<html lang="zh-CN">
<link href="style.css" rel="stylesheet" type="text/css" />
<script src="./dist/main.js"></script>
<title>Web dev</title>
<body>
    <div>
        <button class="" onclick="func.showMsg('click button')">button</button>
        <button class="light" onclick="func.showMsg('click light button')">light button</button>
        <button class="cancel" onclick="func.showMsg('click cancel button')">cancel button</button>
    </div>
    <div id="resp">
    </div>
    <script>
        func.showMsg(conflict.README);
        func.showMsg(conflict.showMsg);
        func.showMsg(func.README);
    </script>
</body>
</html>
  1. 验证打包成果

修改完毕后通过Live Server打开index.html。可以看到两个JavsScript得文件内容合并到了一个main.js中。点击按钮发现function.js中的showMsg函数已经加载成功。

5.  打包CSS样式表

Webpack除了可以处理JavaScript之外,还可以处理样式表文件。和处理JavaScript不同的是,Webpack处理样式表的能力是靠loader来实现的。在Webpack中有两种类型的扩展组件,一种是loader,另一种是plugin,其中loader负责对某一类型的文件进行加载和打包。而plugin负责对加载好的模块进行继续处理。在处理样式表时。我们就需要loader帮助我们进行加载。

  1. loader的安装和配置

webpack的loader是本身是node的组件,因此也需要通过npm进行安装。首先我们来看如何安装处理CSS格式的样式表的loader。在终端中输入如下命令,安装style-loader和css-loader

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

安装完毕后,我们在webpack.config.js配置文件中增加module: rules:数组字段,在数组中添加对CSS样式表的处理配置。配置格式为{test:文件名的正则表达式, use:[loader处理数组]},我们修改webpack.config.js配置文件为如下内容

const path = require('path');
module.exports = {
  mode: 'development',
  entry: './src/index.js',
  output: {
    filename: 'main.js',
    path: path.resolve(__dirname, 'dist'),
  },
  module: {
    rules: [
      {
        test: /\.css$/,
        use: ['style-loader', 'css-loader']
      }
    ]
  }
};
  1. 打包样式表到JavaScript

配置文件修改完毕后,即可在index.js中使用require引用CSS样式表。我们修改index.js的文件为如下内容

import '../css/style.css'
import func from './function.js'
import conflict from './conflict.js'
window.func = func
window.conflict = conflict

修改完毕后,我们在终端中执行如下命令进行编译

npx webpack

  1. 修改index.html并测试

编译完成后,我们修改index.html为如下内容,去掉对CSS的加载。

<!DOCTYPE html>
<html lang="zh-CN">
<script src="./dist/main.js"></script>
<title>Web dev</title>
<body>
    <div>
        <button class="" onclick="func.showMsg('click button')">button</button>
        <button class="light" onclick="func.showMsg('click light button')">light button</button>
        <button class="cancel" onclick="func.showMsg('click cancel button')">cancel button</button>
    </div>
    <div id="resp"></div>
    <script>
        func.showMsg(conflict.README);
        func.showMsg(conflict.showMsg);
        func.showMsg(func.README);
    </script>
</body>
</html>

修改完成后按F5运行。可以看到Webpack将CSS也打包到了main.js中。前台网页只需要引用一个main.js文件就可以完成对JavaScript和CSS样式表的加载。

6.  打包LESS样式表

  1. 安装less-loader

除了CSS样式表,Webpack同样可以处理LESS格式的样式表。在处理LESS样式表时,需要再安装一个less-loader,在终端中执行如下命令

npm i less-loader --save-dev

  1. loader的配置讲解

和CSS样式表相比,LESS样式表增加了一个less-loader。这也是Webpack处理loader的方式,也就是使用不同的loader链式串联的方式。处理的顺序为use字段中loader数组的倒序:以less样式表为例,处理loader为1.less-loader -> 2.css-loader -> 3.style-loader

我们修改webpack.config.js配置文件,在rules数组中增加对LESS样式表的处理配置。

const path = require('path');
module.exports = {
  mode: 'development',
  entry: './src/index.js',
  output: {
    filename: 'main.js',
    path: path.resolve(__dirname, 'dist'),
  },
  module: {
    rules: [
      {
        test: /\.css$/,
        use: ['style-loader', 'css-loader']
      },
      {
        test: /\.less$/,
        use: ['style-loader', 'css-loader', 'less-loader']
      }
    ]
  }
};
  1. 加载less文件并验证

接下来在index.js中通过require添加对style.less文件的加载。

import '../style.css'
import '../color.less'
import func from './function.js'
import conflict from './conflict.js'
window.func = func
window.conflict = conflict

修改完毕后,我们在终端中执行如下命令进行编译

npx webpack

最后通过LiveServer调试网页,会发现less格式的颜色样式表和css格式的位置样式表都生效了。

实验链接:https://developer.aliyun.com/adc/scenario/ddae04f7df0e44f492a4bbd5fa58ee85

相关实践学习
2分钟自动化部署人生模拟器
本场景将带你借助云效流水线Flow实现人生模拟器小游戏的自动化部署
7天玩转云服务器
云服务器ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,可降低 IT 成本,提升运维效率。本课程手把手带你了解ECS、掌握基本操作、动手实操快照管理、镜像管理等。了解产品详情:&nbsp;https://www.aliyun.com/product/ecs
相关文章
|
28天前
|
Web App开发 移动开发 HTML5
html5 + Three.js 3D风雪封印在棱镜中的梅花鹿动效源码
html5 + Three.js 3D风雪封印在棱镜中的梅花鹿动效源码。画面中心是悬浮于空的梅花鹿,其四周由白色线段组成了一个6边形将中心的梅花鹿包裹其中。四周漂浮的白雪随着多边形的转动而同步旋转。建议使用支持HTML5与css3效果较好的火狐(Firefox)或谷歌(Chrome)等浏览器预览本源码。
75 2
|
2月前
|
移动开发 HTML5
html5+three.js公路开车小游戏源码
html5公路开车小游戏是一款html5基于three.js制作的汽车开车小游戏源代码,在公路上开车网页小游戏源代码。
70 0
html5+three.js公路开车小游戏源码
|
3月前
|
JavaScript
webpack学习五:webpack的配置文件webpack.config.js分离,分离成开发环境配置文件和生产环境配置文件
这篇文章介绍了如何将webpack的配置文件分离成开发环境和生产环境的配置文件,以提高打包效率。
59 1
webpack学习五:webpack的配置文件webpack.config.js分离,分离成开发环境配置文件和生产环境配置文件
|
2月前
|
JSON 移动开发 数据格式
html5+css3+js移动端带歌词音乐播放器代码
音乐播放器特效是一款html5+css3+js制作的手机移动端音乐播放器代码,带歌词显示。包括支持单曲循环,歌词显示,歌曲搜索,音量控制,列表循环等功能。利用json获取音乐歌单和歌词,基于html5 audio属性手机音乐播放器代码。
134 6
|
2月前
|
缓存 前端开发 JavaScript
Webpack 4 和 Webpack 5 区别?
【10月更文挑战第23天】随着时间的推移,Webpack 可能会继续发展和演进,未来的版本可能会带来更多的新特性和改进。保持对技术发展的关注和学习,将有助于我们更好地应对不断变化的前端开发环境。
|
3月前
|
缓存 前端开发 JavaScript
Webpack 打包的基本原理
【10月更文挑战第5天】
|
3月前
|
前端开发 JavaScript
ES6模块化和webpack打包
【10月更文挑战第5天】
|
3月前
|
缓存 前端开发 JavaScript
深入了解Webpack:模块打包的革命
【10月更文挑战第11天】深入了解Webpack:模块打包的革命
|
3月前
|
缓存 前端开发 JavaScript
Webpack技术深度解析:模块打包与性能优化
【10月更文挑战第13天】Webpack技术深度解析:模块打包与性能优化
|
3月前
|
前端开发 JavaScript 开发者
深入了解Webpack:现代JavaScript应用的打包利器
【10月更文挑战第11天】 深入了解Webpack:现代JavaScript应用的打包利器