第一节:Webpack简介、安装-配置-打包、常用loader的使用(css/style/less/postcss-loader)

摘要:
.导入打包文件并运行它--调用打包文件--˃II。本地安装和配置打包1.本地安装和默认打包在基本项目src/js下准备t1.js和t2.js;索引。js在src下运行命令来初始化项目。运行以下命令以本地安装webpack。生成的包。json文件如下:{“name”:“01_webpack_localBundle”,“version”:“1.0.0”,“description”:“”,“main”:“index.js”,“scripts”:{”test“:”echo“Error:notestspecified”&&exit1“},”keywords“:[],”author“:”“,”license“:”ISC“,”devDependencies“:”{“webpack”:”^5.52.1“,”webpack-cli“:”^4.8.0“}}运行命令以打包“scripts“:{”build“:“webpack”}。一条干线。js文件也将在dist文件夹中生成并调用。

一. 简介

1. Webpack背景 

(1). 事实上随着前端的快速发展,目前前端的开发已经变的越来越复杂了:

 A. 比如开发过程中我们需要通过模块化的方式来开发;

 B. 比如也会使用一些高级的特性来加快我们的开发效率或者安全性,比如通过ES6+、TypeScript开发脚本逻辑, 通过sass、less等方式来编写css样式代码;

 C. 比如开发过程中,我们还希望实时的监听文件的变化来并且反映到浏览器上,提高开发的效率;

 D. 比如开发完成后我们还需要将代码进行压缩、合并以及其他相关的优化

(2). 但是对于很多的前端开发者来说,并不需要思考这些问题,日常的开发中根本就没有面临这些问题:

 A. 这是因为目前前端开发我们通常都会直接使用三大框架来开发:Vue、React、Angular

 B. 但是事实上,这三大框架的创建过程我们都是借助于脚手架(CLI)的;

 C. 事实上Vue-CLI、create-react-app、Angular-CLI都是基于webpack来帮助我们支持模块化、less、TypeScript、打包优化等的;

2. Webpack是什么?

 官方解释:webpack isstatic module bundler formodernJavaScript applications. ( webpack是一个静态的模块化打包工具,为现代的JavaScript应用程序;)

 PS:

  • 打包bundler:webpack可以将帮助我们进行打包,所以它是一个打包工具
  • 静态的static:这样表述的原因是我们最终可以将代码打包成最终的静态资源(部署到静态服务器);
  • 模块化module:webpack默认支持各种模块化开发,ES Module、CommonJS、AMD等;
  • 现代的modern:我们前端说过,正是因为现代前端开发面临各种各样的问题,才催生了webpack的出现和发展;

 官网地址:https://webpack.docschina.org/      (中文版)

                   https://webpack.js.org/                      (英文版)

第一节:Webpack简介、安装-配置-打包、常用loader的使用(css/style/less/postcss-loader)第1张

3. 使用Webpack的前提

 需要安装nodejs,安装步骤详见:https://www.cnblogs.com/yaopengfei/p/14478126.html

该系列使用的node版本和npm版本如下:

第一节:Webpack简介、安装-配置-打包、常用loader的使用(css/style/less/postcss-loader)第2张

4. 全局安装和默认打包

(PS:这里主要是为了进行快速入门,进行全局安装和简单的打包,在实际开发中,很少这么用,都是局部安装,项目不同,可能安装的webpack版本也不同)

说明:

第一节:Webpack简介、安装-配置-打包、常用loader的使用(css/style/less/postcss-loader)第3张

(1).  全局安装webpack,指令和版本如下

【npm install webpack webpack-cli -g】

第一节:Webpack简介、安装-配置-打包、常用loader的使用(css/style/less/postcss-loader)第4张

(2). 新建1个工程,在src/js文件夹下,新建t1.js 和 t2.js

t1.js 是commonjs的写法,代码如下

第一节:Webpack简介、安装-配置-打包、常用loader的使用(css/style/less/postcss-loader)第5张第一节:Webpack简介、安装-配置-打包、常用loader的使用(css/style/less/postcss-loader)第6张
// 下面是commonjs的写法
const getPrice=function(){
    return "$100";
}
// 对外导出
module.exports={
    getPrice
}
View Code

t2.js 是 ES6 Module的写法,代码如下

第一节:Webpack简介、安装-配置-打包、常用loader的使用(css/style/less/postcss-loader)第7张第一节:Webpack简介、安装-配置-打包、常用loader的使用(css/style/less/postcss-loader)第8张
// 下面是  ES6 的写法
export function sum(num1,num2){
    return num1+num2;
}
View Code

(3).  在src目录下新建index.js文件,然后导入t1.js 和 t2.js

第一节:Webpack简介、安装-配置-打包、常用loader的使用(css/style/less/postcss-loader)第9张第一节:Webpack简介、安装-配置-打包、常用loader的使用(css/style/less/postcss-loader)第10张
// commonjs的导入
const {getPrice}=require('./js/t1');
// ES6的导入
import {sum} from './js/t2.js';

// 调用
console.log(getPrice());
console.log(sum(10,20));
View Code

(4). 运行下面指令进行打包

【webpack】

当我们运行webpack时,webpack会查找当前目录下的 src/index.js作为入口;然后在dist文件夹下生成main.js打包后的文件,这就是默认规范 (如果当前项目中没有存在src/index.js文件,那么会报错)

 PS:也可以指定入口文件,指定打包后的文件名和存放路径。 

【 npx webpack --entry ./src/index.js --output-path ./build】

(5). 引入打包后的文件,进行运行。 

    <body>
        <div>测试打包问题</div>
        
        <!-- 报错 -->
        <!-- <script src="http://t.zoukankan.com/src/index.js" ></script> -->
        
        <!-- 调用打包后的文件 -->
        <script src="dist/main.js" ></script>
        
    </body>

二. 局部安装和配置打包

1. 局部安装和默认打包

(1). 准备基础项目

 src/js下的t1.js 、t2.js; src下的index.js

(2). 运行指令【npm init -y】初始化项目

第一节:Webpack简介、安装-配置-打包、常用loader的使用(css/style/less/postcss-loader)第11张

(3). 运行下面指令,进行webpack的局部安装(且开发依赖)

 【npm install webpack webpack-cli -D】

生成的package.json文件如下:

{
  "name": "01_webpack_localBundle",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo "Error: no test specified" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "webpack": "^5.52.1",
    "webpack-cli": "^4.8.0"
  }
}

(4). 运行指令【npx webpack】进行打包

 (或者将package.json中scripts标签进行如下改变,然后运行指令【npm run build】进行打包)

 "scripts": {
   "build": "webpack"
  },

 同样会在dist文件夹下生成1个main.js文件,调用即可。

2. 通过配置文件打包(推荐)

(1).  新建 webpack.config.js 配置文件(默认名称就叫这个,不建议改)

  指定入口文件、打包后的存放路径、打包后的文件

// 这里必须通过 commonjs的写法配置,不能写 ES6的写法
const path = require('path');

module.exports = {
  entry: "./src/main.js",                      //入口文件
  output: {
    path: path.resolve(__dirname, "./build"),  //打包后存放路径, 必须写绝对路径
    filename: "bundle.js"                      //打包后的文件名称
  }
}

(2). 运行指令【npm run build】,则会在build文件夹下生成一个 bundle.js文件,进行调用即可。

第一节:Webpack简介、安装-配置-打包、常用loader的使用(css/style/less/postcss-loader)第12张

PS: webpack.config.js这么默认文件名也可以改,但需要修改下面代码(不建议改!!)

第一节:Webpack简介、安装-配置-打包、常用loader的使用(css/style/less/postcss-loader)第13张

三. 常用loader

1. 什么是loader?

[常用loader详见官方文档:https://webpack.docschina.org/loaders/]

(1). webpack在处理应用程序时,它会根据命令或者配置文件找到入口文件;

  从入口开始,会生成一个 依赖关系图,这个依赖关系图会包含应用程序中所需的所有模块(比如.js文件、css文件、图片、字体等); 

  然后遍历图结构,打包一个个模块(根据文件的不同使用不同的loader来解析);

(2). loader 可以用于对模块的源代码进行转换;在加载这个模块时,webpack其实并不知道如何对其进行加载,我们必须制定对应的loader来完成这个功能;

  比如:对于加载css文件来说,我们需要一个可以读取css文件的loader;这个loader最常用的是css-loader;

2. loader的配置方式 

第一节:Webpack简介、安装-配置-打包、常用loader的使用(css/style/less/postcss-loader)第14张

3. css-loader 和 style-loader

(1). 作用

  css-loader用于加载解析css文件,并不会将解析之后的css插入到页面中

  style-loader用于将css插入<style>标签的操作,所以这两个loader通常是一块使用

(2). 实战配置

A.  准备代码

style.css样式文件

.title{
    font-size: 20px;
    background-color: antiquewhite;
    font-weight: bold;
    color: blue;
}

ceateHtml.js 文件

import "../css/style.css";

const divEl = document.createElement("div");
divEl.className = "title";
divEl.innerHTML = "Hello,ypf";

document.body.appendChild(divEl);

createHtml.js文件需要导入到入口文件main.js中。

B. 安装两个loader

 【npm install css-loader -D】

 【npm install style-loader -D】

C. 进行配置,webpack.config.js文件如下

// 这里必须通过 commonjs的写法配置,不能写 ES6的写法
const path = require('path');

module.exports = {
    entry: "./src/main.js", //入口文件
    output: {
        path: path.resolve(__dirname, "./build"), //打包后存放路径, 必须写绝对路径
        filename: "bundle.js" //打包后的文件名称
    },
    module: {
        rules: [{
            test: /.css$/, //(表示所有的css结尾的文件都进行匹配)
            use: [
                // 此处的执行顺序是由下往上(下面写法是简化写法)
                "style-loader",
                "css-loader"
            ]
        }]
    }
}

也可以完整写法:

module: {
        rules: [{
            test: /.css$/, //(表示所有的css结尾的文件都进行匹配)
            use: [
                // 完整写法,执行顺序是由下往上
                { loader: "style-loader" },
                { loader: "css-loader" }
            ]
        }]
    }

D. 打包并测试

运行指令【npm run build】,运行结果如下:

第一节:Webpack简介、安装-配置-打包、常用loader的使用(css/style/less/postcss-loader)第15张

4. less-loader

(1). 作用

  将less文件转换成css文件,通常需要配合css-loader、style-loader一起使用

(2). 实战配置

A.  准备代码

title.less

@textDecoration: underline;

.title {
  text-decoration: @textDecoration;
}

需要将title.less导入对应的js文件中

第一节:Webpack简介、安装-配置-打包、常用loader的使用(css/style/less/postcss-loader)第16张

B. 安装loader

【npm install less -D】

【npm install less-loader -D】

注:less-loader依赖less,所有需要先安装less。

C. 进行配置 webpack.config.js, 代码如下:

module: {
        rules: [{
                test: /.css$/, //(表示所有的css结尾的文件都进行匹配)
                use: [
                    // 完整写法,执行顺序是由下往上
                    { loader: "style-loader" },
                    { loader: "css-loader" }
                ]
            },
            {
                test: /.less$/, //(表示所有的less结尾的文件都进行匹配)
                use: [
                    // 简化写法,执行顺序是由下往上
                    "style-loader",
                    "css-loader",
                    "less-loader"
                ]
            }
        ]
    }

D. 打包测试

【npm run build】

第一节:Webpack简介、安装-配置-打包、常用loader的使用(css/style/less/postcss-loader)第17张

补充:上面的less组件可以直接把less文件转换成css文件,指令如下:

 【npx lessc ./src/css/title.less title.css】

5. postcss-loader 和 插件autoprefixer

(1). 作用

  postcss-loader:我们进行一些CSS的转换和适配,比如自动添加浏览器前缀、css样式的重置

  autoprefixer:用于添加前缀

(2). 实战  

A. 安装loader

 【npm install postcss postcss-cli -D】

 【npm install autoprefixer -D】

 【npm install postcss-loader -D】

B. 进行配置

    module: {
        rules: [
            {
                test: /.css$/, //(表示所有的css结尾的文件都进行匹配)
                use: [
                    "style-loader",
                    "css-loader",
                    {
                        loader: "postcss-loader",
                        options: {
                            postcssOptions: {
                                plugins: [
                                    require("autoprefixer")
                                ]
                            }
                        }
                    }
                ]
            }
        ]
    },

C. 打包测试

【npm run build】 

第一节:Webpack简介、安装-配置-打包、常用loader的使用(css/style/less/postcss-loader)第18张

6. 补充:命令行使用postcss 和  postcss-preset-env

 【npm install postcss postcss-cli -D】

 【npm install autoprefixer -D】

 【npx postcss --use autoprefixer -o end.css ./src/css/style.css】

【npm install postcss-preset-env -D】

  postcss-preset-env:postcss-preset-env也是一个postcss的插件;帮助我们将一些现代的CSS特性,转成大多数浏览器认识的CSS,并且会根据目标浏览器或者运行时环境添加所需的polyfill,也包括会自动帮助我们添加autoprefixer(所以相当于已经内置了autoprefixer);

!

  • 作       者 : Yaopengfei(姚鹏飞)
  • 博客地址 : http://www.cnblogs.com/yaopengfei/
  • 声     明1 : 如有错误,欢迎讨论,请勿谩骂^_^。
  • 声     明2 : 原创博客请在转载时保留原文链接或在文章开头加上本人博客地址,否则保留追究法律责任的权利。
 

免责声明:文章转载自《第一节:Webpack简介、安装-配置-打包、常用loader的使用(css/style/less/postcss-loader)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Windows 7下一个:该应用程序不能正常启动(0xc0150002)Nodejs介绍及npm工具使用下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

前端规范标准(一)

目录 1 、 规范目的 2 、 基本准则 3 、 文件规范 4 、 文件规范 5 、 html 书写规范 6 、 css 书写规范 7 、 JavaScript 书写规范 8 、 图片规范 9 、 注释规范 10 、 开发及测试工具约定 11 、 其他规范 12 、 CSS Hack   1  规范目的 为提高团队协作效率, 便于后台人员添加功能及前...

fastadmin 压缩js和css的时候,出现错误

fastadmin压缩文件的方式 1.直接在后台进行压缩,但会提示node环境没装,就算装了,也提示错误,很郁闷。 但是这一步,可以拿到压缩的命令,方便后面复制 ![](https://img2020.cnblogs.com/blog/1515769/202106/1515769-20210628175245863-1855629755.png) 2....

CSS(Sass)模块化

在Vue大行其道的今天,我们也受益匪浅,再次感谢@尤大。那么在用Vue开发的过程中,我们大概率会用到Sass来提高我们前端的开发效率,为前端工程化做了很大贡献,Sass本身具有很多令人兴奋的功能,例如:variable、function、mixin、nested、module等,本文主要来研究module——CSS模块化。 我们在开发中最常用的模块化指令就...

html/css基础篇——关于浏览器window、document、html、body高度的探究

  首先说明本人所理解的这几个元素的计算   window高度应当是文档所在窗口的可视高度(没有包括浏览器的滚动条),计算方法document.documentElement.clientHeight   document高度应该为文档内容的高度,计算方法Math.max(document.body[ "scrollHeight" ], document....

记一次真实的webpack优化经历

前言 公司目前现有的一款产品是使用vue v2.0框架实现的,配套的打包工具为webpack v3.0。整个项目大概有80多个vue文件,也算不上什么大型项目。 只不过每次头疼的就是打包所耗费的时间平均在一分钟左右,而且打包后有几个文件显示为【big】,也就是文件体积过大。 最近就想着捣鼓一下,看能不能在此前的基础上做一些优化,顺带记录下来分享给大家。...

用HTML,CSS和JavaScript创建iPhone/iPad应用程序

象大多数iPad粉丝和程序员一样,我有一个梦想,那就是如果不需要昂贵的Apple设备,不要繁琐的审批程序,不要为发布应用交钱就能开发iPad 应用程序该多好.现在这个梦想就要实现了,那就是网页应用程序. 那么,怎样才能让网页象看起来象本机程序一样呢?你需要做这些工作: 全屏幕:(去掉浏览器的地址栏和按钮栏);防止窗口滚动和缩放; 响应多点触摸和手势事件;...