一、css之上的语言

js之上的语言有jsx、tyepscript、coffescript。 html之上的语言有jade。 css之上的语言有sass、scss、less、stylus,这几种语言区别其实不大,完全不需要纠结到底用那个。

css的缺点:

  • 语法不够强大,不能够嵌套书写,不利于模块化开发
  • 没有变量和逻辑上的复用机制,导致在css的属性值中只能使用字面量形式,以及不断重复书写重复的样式,导致难以维护。

css预编译语言的特点:

  • 可以使用变量:就像其他编程语言一样,免于多处修改。

    Sass:使用$对变量进行声明,变量名和变量值使用冒号进行分割

    Less:使用@对变量进行声明

    Stylus:中声明变量没有任何限定,结尾的分号可有可无,但变量名和变量值之间必须要有『等号』。

  • 作用域:有了变量,就必须得有作用域进行管理。就想js一样,它会从局部作用域开始往上查找变量。 Sass:它的方式是三者中最差的,不存在全局变量的概念

    Less:它的方式和js比较相似,逐级往上查找变量

    Stylus:它的方式和Less比较相似,但是它和Sass一样更倾向于指令式查找

  • 嵌套:对于css来说,有嵌套的写法无疑是完美的,更像是父子层级之间明确关系

postcss并不是一种预处理语言,而是一套插件系统,很多人认为postcss是css的未来。

二、使用lessc命令进行编译

原始的css已经足够优美了,想想开发桌面应用时我们是如何定义控件样式的,通过指令形式指定控件样式更加繁琐。 css之上的语言差别不大,我选less。npm install -g less less-loader 安装完成之后,使用lessc命令就可以编译less文件了。

三、使用extract-text-webpack-plugin插件自动提取css文件

为什么要把css文件单独出去

如果不单独出去,页面加载js会比较慢,用户会看到css加载之前的内容,页面比较丑陋。页面先加载css,再渲染html,最后才执行js。把css作为单独的link标签能够使页面加载时更加美观。

配置

webpack.config.js

var p = require('path')
var process = require('process')
var NODE_PATH=process.env['NODE_PATH']
const ExtractTextPlugin = require("extract-text-webpack-plugin")
module.exports = {
mode: 'development',
entry: { "main.js": "./index.js" },
output: { filename: '[name]' },
module: {
rules:[
{ test:/\.less$/, use:ExtractTextPlugin.extract({ use:['css-loader','less-loader'] }) }
]
},
resolve:{ modules:[NODE_PATH] },
resolveLoader: { modules: [NODE_PATH] },
plugins: [ new ExtractTextPlugin("custom.css"), ]
}

上面的配置中,通过resolve.modules设置寻找模块的路径,使用resolveLoader设置寻找loader的路径,这种方式在使用webpack-dev-server时可能会有问题,最佳方式是建立一个node_modules软连接,把NODE_PATH链接到当前文件夹。

可能遇到的问题

plain Error: Chunk.entrypoints: Use Chunks.groupsIterable and filter by instanceof Entrypoint instead

extract-text-webpack-plugin这个插件目前不支持webpack 4.0,而npm仓库中默认安装的是适用于webpack3.0的插件,解决方案是直接使用下一代extract-text-webpack-plugin插件:

npm install -g extract-text-webpack-plugin@next

参考资料

webpack官网extract-text-webpack插件介绍

https://www.webpackjs.com/plugins/extract-text-webpack-plugin/

关于postcss https://segmentfault.com/a/1190000011595620

npm extract-text-webpack插件

https://www.npmjs.com/package/extract-text-webpack-plugin

使用extract-text-webpack-plugin提取css文件的更多相关文章

  1. webpack生成的css文件background-image url图片无法加载

    之前在使用webpack3构建基于less预处理的项目时,在对指定的元素使用background-image: url(xxx)来设置背景图片时,本地开发是ok的,但是在项目编译产出后背景图片就找不到 ...

  2. webpack快速入门——CSS文件打包

    1.在src下新建css文件,在css文件下新建index.css文件,输入以下代码 body{ background:pink; color:yellowgreen; } 2.css建立好后,需要引 ...

  3. webpack加载css文件及其配置

    webpack加载css文件及其配置 当我们写了几个css文件之后如果想要引用到html中去的话我们最开始的方式就是通过link标签将css文件导入进去,但是如果我们的css文件有很多的话,一个个的导 ...

  4. webpack配置:css文件打包、JS压缩打包和HTML文件发布

    一.CSS文件打包 1.在src下新建css文件,在css文件下新建index.css文件,输入以下代码 body{ color:red; font-size:20px; } 2.css建立好后,需要 ...

  5. webpack打包提取css到独立文件

    将本来镶嵌在bundle.js的css转到外面来,我们需要用到一个插件:extract-text-webpack-plugin 使用方法: 1.安装 npm i extract-text-webpac ...

  6. vue webpack打包后.css文件里面的背景图片路径错误解决方法

    资源相对引用路径 问题描述 一般情况下,通过webpack+vuecli默认打包的css.js等资源,路径都是绝对的. 但当部署到带有文件夹的项目中,这种绝对路径就会出现问题,因为把配置的static ...

  7. webpack4对第三方库css,项目全局css和vue内联css文件提取到单独的文件(二十二)

    在讲解提取css之前,我们先看下项目的架构如下结构: ### 目录结构如下: demo1 # 工程名 | |--- dist # 打包后生成的目录文件 | |--- node_modules # 所有 ...

  8. webpack快速入门——CSS进阶,Less文件的打包和分离

    1.要使用less,首先使用npm安装less服务 cnpm install less --save-dev 还需要安装Less-loader用来打包使用. cnpm install less-loa ...

  9. webpack快速入门——CSS进阶:SASS文件的打包和分离

    1.安裝:因为sass-loader依赖于node-sass,所以需要先安装node-sass cnpm install node-sass --save-dev cnpm install sass- ...

随机推荐

  1. 发布一个高效的JavaScript分析、压缩工具 JavaScript Analyser

    发布一个高效的JavaScript分析.压缩工具 JavaScript Analyser 先发一段脚本压缩示例,展示一下JSA语法压缩和优化功能. try { //xxxx(); } catch (e ...

  2. 利用blob对象实现粘贴图片

    blob的一个常用应用场景,就是获取剪切板上的数据来进行粘贴的操作.例如通过QQ截图后,需要在网页上进行粘贴操作. 粘贴图片我们需要解决下面几个问题 1.监听用户的粘贴操作 2.获取到剪切板上的数据 ...

  3. 利用样式——android2.3实现android4.0风格的edittext

    先看效果: 思路:在源码里找到4.0风格的图片作为背景,xml文件定义点击时候边框变化 步骤: ①.在F:\sdk\sdk\platforms\android-14\data\res\drawable ...

  4. 1 R语言介绍

    注释:# 赋值:<- 查看.设定当前工作目录:getwd()  setwd()   wd:workspace directory[setwd("c:/myproject/project ...

  5. "garbage at end of line" on Windows 10

      在windows 10上运行docker-machine scp myvm1 docker-compose.yml myvm1:~的时候报错: "garbage at end of li ...

  6. BigDecimal 的幂次方运算

    public static void main(String[] args){ BigDecimal bg1, bg2; bg1 = new BigDecimal("200000.45&qu ...

  7. 使用Snap.svg类库实现的抖动式的幻灯播放效果

    在线演示 本地下载 这个幻灯中,使用了SVG来生成具有动画弧度的幻灯背景效果,如果你在项目中能够支持现代浏览器的话,尝试一下这个效果吧,很赞! 想了解基础使用,观看这个轻视频吧:Snap.svg处理和 ...

  8. SpringBoot添加对Log4j2的支持

    1.在添加对Log4j2的支持前,需要先把SpringBoot默认使用的Logback日志框架排除,修改pom.xml文件: <dependency> <groupId>org ...

  9. 使用SqlBulkCopy类实现导入excel表格

    前言: 上篇博客介绍了SqlBulkCopy类批量操作数据库的相关操作,最后提到了可以使用这个类实现excel文件导入数据库,接下来我做简单介绍. 首先说一下思路: 把excel中的数据读出来并放入到 ...

  10. Go语言和ASP.NET的一般处理程序在处理WEB请求时的速度比较

    Go语言和ASP.NET的一般处理程序在处理WEB请求时的速度比较 1.首先写一个Go语言的简单WEB程序,就返回一个HelloWord! package main import ( f " ...