webpack4 SCSS提取和懒加载的示例


Posted in Javascript onSeptember 03, 2018

本节课讲解在webpack v4中的 SCSS 提取和懒加载。值得一提的是,v4v3在 Scss 的懒加载上的处理方法有着巨大差别。

本节课主要涉及 SCSS 在懒加载下提取的相关配置和插件使用。

下图展示了这次的目录代码结构:

webpack4 SCSS提取和懒加载的示例

为了实现 SCSS 懒加载,我们使用了extract-text-webpack-plugin插件。

需要注意,在安装插件的时候,应该安装针对v4版本的extract-text-webpack-plugin。npm 运行如下命令:npm install --save-dev extract-text-webpack-plugin@next

其余配置,与第六课相似。package.json配置如下:

{
 "devDependencies": {
 "css-loader": "^1.0.0",
 "extract-text-webpack-plugin": "^4.0.0-beta.0",
 "node-sass": "^4.9.2",
 "sass-loader": "^7.0.3",
 "style-loader": "^0.21.0",
 "webpack": "^4.16.0"
 }
}

关于我们的 scss 文件下的样式文件,base.scss:

// 网站默认背景色:red
$bgColor: red !default;
*,
body {
 margin: 0;
 padding: 0;
}
html {
 background-color: $bgColor;
}

common.scss:

// 覆盖原来颜色:green
html {
 background-color: green !important;
}

2. 使用ExtractTextPlugin

使用extract-text-webpack-plugin,需要在webpack.config.jsplugins选项和rulesscss的相关选项进行配置。

webpack.config.js:

const path = require("path");
const ExtractTextPlugin = require("extract-text-webpack-plugin");

module.exports = {
 entry: {
 app: "./src/app.js"
 },
 output: {
 publicPath: __dirname + "/dist/",
 path: path.resolve(__dirname, "dist"),
 filename: "[name].bundle.js",
 chunkFilename: "[name].chunk.js"
 },
 module: {
 rules: [
  {
  test: /\.scss$/,
  use: ExtractTextPlugin.extract({
   // 注意 1
   fallback: {
   loader: "style-loader"
   },
   use: [
   {
    loader: "css-loader",
    options: {
    minimize: true
    }
   },
   {
    loader: "sass-loader"
   }
   ]
  })
  }
 ]
 },
 plugins: [
 new ExtractTextPlugin({
  filename: "[name].min.css",
  allChunks: false // 注意 2
 })
 ]
};

在配置中,注意 1中的callback配置项,针对 不提取为单独css文件的scss样式 应该使用的 LOADER。即使用style-loader将 scss 处理成 css 嵌入网页代码。

注意 2中的allChunks必须指明为false。否则会包括异步加载的 CSS!

3. SCSS引用和懒加载

在项目入口文件app.js中,针对 scss 懒加载,需要引入以下配置代码:

import "style-loader/lib/addStyles";
import "css-loader/lib/css-base";

剩下我们先设置背景色为红色,在用户点击鼠标后,懒加载common.scss,使背景色变为绿色。剩余代码如下:

import "./scss/base.scss";

var loaded = false;
window.addEventListener("click", function() {
 if (!loaded) {
 import(/* webpackChunkName: 'style'*/ "./scss/common.scss").then(_ => {
  // chunk-name : style
  console.log("Change bg-color of html");
  loaded = true;
 });
 }
});

4. 打包和引入

根据我们在app.js中的webpackChunkName的配置,可以猜测,打包结果中有:style.chunk.js 文件。

命令行执行webpack打包后,/dist/目录中的打包结果如下:

webpack4 SCSS提取和懒加载的示例

最后,我们需要在 html 代码中引入打包结果中的、非懒加载的样式(/dist/app.min.css)和 js 文件(/dist/app.bundle.js)。

<!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>
 <link rel="stylesheet" href="./dist/app.min.css" rel="external nofollow" >
</head>
<body>
 <script src="./dist/app.bundle.js"></script>
</body>
</html>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jquery.validate使用攻略 第一部
Jul 01 Javascript
jQuery.extend 函数详解
Feb 03 Javascript
Js实现当前点击a标签变色突出显示其他a标签回复原色
Nov 27 Javascript
js设置文本框中焦点位置在最后的示例代码(简单实用)
Mar 04 Javascript
微信企业号开发之微信考勤Cookies的使用
Sep 11 Javascript
JavaScript DOM 学习总结(五)
Nov 24 Javascript
详细讲解JavaScript中的this绑定
Oct 10 Javascript
Javascript中call,apply,bind方法的详解与总结
Dec 12 Javascript
react MPA 多页配置详解
Oct 18 Javascript
创建nuxt.js项目流程图解
Mar 13 Javascript
tracking.js实现前端人脸识别功能
Apr 16 Javascript
微信小程序国际化探索实现(附源码地址)
May 20 Javascript
vue自定v-model实现表单数据双向绑定问题
Sep 03 #Javascript
详解vue-cli下ESlint 配置说明
Sep 03 #Javascript
解决vue的 v-for 循环中图片加载路径问题
Sep 03 #Javascript
Vue实现底部侧边工具栏的实例代码
Sep 03 #Javascript
Angular动态绑定样式及改变UI框架样式的方法小结
Sep 03 #Javascript
node.js使用免费的阿里云ip查询获取ip所在地【推荐】
Sep 03 #Javascript
react在安卓中输入框被手机键盘遮挡问题的解决方法
Sep 03 #Javascript
You might like
用PHP和ACCESS写聊天室(四)
2006/10/09 PHP
PHP自动生成后台导航网址的最佳方法
2013/08/27 PHP
php 生成自动创建文件夹并上传文件的示例代码
2014/03/07 PHP
php检索或者复制远程文件的方法
2015/03/13 PHP
Symfony2实现在controller中获取url的方法
2016/03/18 PHP
Yii框架数据库查询、增加、删除操作示例
2019/10/14 PHP
基于jquery的高性能td和input切换并可修改内容实现代码
2011/01/09 Javascript
动态加载jQuery的两种方法实例分析
2015/07/17 Javascript
Jquery插件easyUi实现表单验证示例
2015/12/15 Javascript
js实现图片切换(动画版)
2016/12/25 Javascript
node.js平台下利用cookie实现记住密码登陆(Express+Ejs+Mysql)
2017/04/26 Javascript
jQuery实现列表的增加和删除功能
2018/06/14 jQuery
vue项目中使用lib-flexible解决移动端适配的问题解决
2018/08/23 Javascript
JavaScript对象拷贝与赋值操作实例分析
2018/12/10 Javascript
其实你可以少写点if else与switch(推荐)
2019/01/10 Javascript
javascript严格模式详解(含严格模式与非严格模式的区别)
2019/11/12 Javascript
JavaScript前后端JSON使用方法教程
2020/11/23 Javascript
Python 实现遥感影像波段组合的示例代码
2019/08/04 Python
python爬取Ajax动态加载网页过程解析
2019/09/05 Python
解决pyCharm中 module 调用失败的问题
2020/02/12 Python
Django接收照片储存文件的实例代码
2020/03/07 Python
Scrapy框架介绍之Puppeteer渲染的使用
2020/06/19 Python
Django中F函数的使用示例代码详解
2020/07/06 Python
python爬虫用scrapy获取影片的实例分析
2020/11/23 Python
HTML5 Canvas渐进填充与透明实现图像的Mask效果
2013/07/11 HTML / CSS
国际礼品店:GiftsnIdeas
2018/05/03 全球购物
英国护发和美妆在线商店:Klip Shop
2019/03/24 全球购物
甜品店的创业计划书范文
2014/01/02 职场文书
开朗女孩的自我评价
2014/02/10 职场文书
合作经营协议书范本
2014/04/17 职场文书
2014年医院十一国庆节活动方案
2014/09/15 职场文书
区域经理岗位职责
2015/02/02 职场文书
读书笔记格式
2015/07/02 职场文书
学长教您写论文:经验总结
2019/07/09 职场文书
JavaScript嵌入百度地图API的最详细方法
2021/04/16 Javascript
十大最强飞行系宝可梦,BUG燕上榜,第二是飞行系王者
2022/03/18 日漫