(1)path模块用于对路径和文件进行处理,提供了很多好用的方法。
(2)我们知道在Mac OS、Linux和window上的路径时不一样的
(3)那么如果我们在window上使用 \ 来作为分隔符开发了一个应用程序,要部署到Linux上面应该怎么办呢?
(4)从路径中获取信息
(5)路径的拼接:path.join
(6)拼接绝对路径:path.resolve
const path = require("path")const filepath = "C://abc/cba/nba.txt"// 1.可以从一个路径中获取一些信息
console.log(path.extname(filepath))
console.log(path.basename(filepath))
console.log(path.dirname(filepath))const path1 = "/abc/cba"
const path2 = "../why/kobe/james.txt"
// console.log(path1 + path2)// 2.将多个路径拼接在一起: path.join
// console.log(path.join(path1, path2))
(7)在webpack中获取路径或者起别名的地方也可以使用
事实上随着前端的快速发展,目前前端的开发已经变的越来越复杂了:
但是对于很多的前端开发者来说,并不需要思考这些问题,日常的开发中根本就没有面临这些问题:
(1)我们先来看一下官方的解释:
webpack is a static module bundler for modern JavaScript applications
(2)webpack是一个静态的模块化打包工具,为现代的JavaScript应用程序;
(3)我们来对上面的解释进行拆解:
webpack的官方文档是webpackwebpack is a module bundler. Its main purpose is to bundle JavaScript files for usage in a browser, yet it is also capable of transforming, bundling, or packaging just about any resource or asset.https://webpack.js.org/
webpack的中文官方文档是webpackwebpack 是一个模块打包器。它的主要目标是将 JavaScript 文件打包在一起,打包后的文件用于在浏览器中使用,但它也能够胜任转换(transform)、打包(bundle)或包裹(package)任何资源(resource or asset)。https://webpack.docschina.org/
DOCUMENTATION:文档详情,也是我们最关注的
Webpack的运行是依赖Node环境的,所以我们电脑上必须有Node环境
Node官方网站:Node.js
webpack的安装目前分为两个:webpack、webpack-cli
那么它们是什么关系呢?
npm install webpack webpack-cli –g # 全局安装
npm install webpack webpack-cli –D # 局部安装
或使用yarn(前提是下载好)
yarn add webpack webpack-cli -g # 全局安装
yarn add webpack webpack-cli -D # 局部安装
(1)我们可以通过webpack进行打包,之后运行打包之后的代码
在目录下直接执行 webpack 命令(这种方式,前提是你安装了全局的webpack,但是这种方式不推荐)
webpack
(2)生成一个dist文件夹,里面存放一个main.js的文件,就是我们打包之后的文件:
(3)我们发现是可以正常进行打包的,但是有一个问题,webpack是如何确定我们的入口的呢?
(4)当然,我们也可以通过配置来指定入口和出口
npx webpack --entry ./src/main.js --output-path ./build
前面我们直接执行webpack命令使用的是全局的webpack,如果希望使用局部的可以按照下面的步骤来操作。
第一步:创建package.json文件,用于管理项目的信息、库依赖等
npm init 或 yarn init
第二步:安装局部的webpack
npm install webpack webpack-cli -D 或 yarn add webpack webpack-cli -D
第三步:使用局部的webpack
npx webpack 或 npm webpack 或 yarn webpack
第四步:在package.json中创建scripts脚本,执行脚本打包即可
npm run build
// 人物属性
const path = require('path');module.exports = {entry: './src/main.js', // 指定webpack入口output: { // 指定webpack压缩后的文件出口path: path.resolve(__dirname, 'dist'), // 指定输出路径filename: 'bundle.js', // 指定输出文件名},
};
继续执行webpack命令,依然可以正常打包
但是如果我们的配置文件并不是webpack.config.js的名字,而是其他的名字呢?
webpack --config wk.config.js
但是每次这样执行命令来对源码进行编译,会非常繁琐,所以我们可以在package.json中增加一个新的脚本:
"scripts": {"build": "webpack --config wk.config.js"}
之后我们执行 npm run build来打包即可。
webpack到底是如何对我们的项目进行打包的呢?
通过JavaScript创建了一个元素,并且希望给它设置一些样式;
common.js
import "../css/div_style.css" // 创建div元素
const divEl = document.createElement("div")
divEl.textContent = "Hello World"
divEl.classList.add("content")
document.body.append(divEl)// 创建h2元素
const titleEl = document.createElement("h2")
titleEl.textContent = "哈哈哈哈"
titleEl.classList.add("title")
document.body.append(titleEl)
div_style.css
.content {font-size: 20px;color: red;user-select: none;background-color: #66666666;
}
main.js
// 引入到main.js (因为这里是入口需要产生关系, 才会被webpack找到打包起来)
import "./common.js"
继续编译命令npm run build
上面的错误信息告诉我们需要一个loader来加载这个css文件,但是loader是什么呢?
那么我们需要一个什么样的loader呢?
css-loader的安装:
npm install css-loader -D
如何使用这个loader来加载css文件呢?有三种方式:
内联方式:内联方式使用较少,因为不方便管理;
在引入的样式前加上使用的loader,并且使用!分割;
loader配置方式
- module.rules中允许我们配置多个loader(因为我们也会继续使用其他的loader,来完成其他文件的加载);
- 这种方式可以更好的表示loader的配置,也方便后期的维护,同时也让你对各个Loader有一个全局的概览;
- rules属性对应的值是一个数组:[Rule]
- 数组中存放的是一个个的Rule,Rule是一个对象,对象中可以设置多个属性:
- test属性:用于对 resource(资源)进行匹配的,通常会设置成正则表达式;
- use属性:对应的值时一个数组:[UseEntry]
- UseEntry是一个对象,可以通过对象的属性来设置一些其他属性
- loader:必须有一个 loader属性,对应的值是一个字符串;
- options:可选的属性,值是一个字符串或者对象,值会被传入到loader中;
- query:目前已经使用options来替代;
- 传递字符串(如:use: [ 'style-loader' ])是 loader 属性的简写方式(如:use: [ { loader: 'style-loader'} ]);
- loader属性: Rule.use: [ { loader } ] 的简写。
Loader的配置代码
我们已经可以通过css-loader来加载css文件了
但是你会发现这个css在我们的代码中并没有生效(页面没有效果)。
这是为什么呢?
安装style-loader:
npm install style-loader -D 或 yarn add style-loader -D
那么我们应该如何使用style-loader:
use: [ // use中多个loader的使用顺序是从后往前{ loader: "style-loader" },{ loader: "css-loader" }
]
重新执行编译npm run build,可以发现打包后的css已经生效了:当前目前我们的css是通过页内样式的方式添加进来的;
首先我们需要确定,less、sass等编写的css需要通过工具转换成普通的css;
@fontSize: 50px;
@fontColor: blue;.title {font-size: @fontSize;color: @fontColor;user-select: none;
}
我们可以使用less工具来完成它的编译转换:
npm install less -D 或 yarn add less -D
n执行如下命令:
npx lessc ./src/css/title.less title.css
less-loader处理
但是在项目中我们会编写大量的css,它们如何可以自动转换呢?
这个时候我们就可以使用less-loader,来自动使用less工具转换less到css;
npm install less-loader -D 或 yarn add less-loader -D
配置webpack.config.js
{test: /\.less$/,use: [{ loader: "style-loader" },{ loader: "css-loader" },{ loader: "less-loader" }]
}
执行npm run build 命令less就可以自动转换成css,并且页面也会生效了
什么是PostCSS呢?
如何使用PostCSS呢?主要就是两个步骤:
单独的postcss配置文件
因为我们需要添加前缀,所以要安装autoprefixer:
npm install autoprefixer -D
我们可以将这些配置信息放到一个单独的文件中进行管理:
在根目录下创建postcss.config.js ,注意这个名字是固定的,当插件未在webpack.config.js,中配置,会自动检测目录中是否有这个配置文件,并把它加载到插件中
postcss-preset-env
事实上,在配置postcss-loader时,我们配置插件并不需要使用autoprefixer。
我们可以使用另外一个插件:postcss-preset-env
首先,我们需要安装postcss-preset-env: npm install postcss-preset-env -D
之后,我们直接修改掉之前的autoprefixer即可:
注意:我们在使用某些postcss插件时,也可以直接传入字符串
webpack.config.js
const path = require("path")module.exports = {entry: "./src/main.js",output: {filename: "bundle.js",path: path.resolve(__dirname, "./build")},module: {rules: [{// 告诉webpack匹配什么文件test: /\.css$/,// use: [ // use中多个loader的使用顺序是从后往前// { loader: "style-loader" },// { loader: "css-loader" }// ],// 简写一: 如果loader只有一个// loader: "css-loader"// 简写二: 多个loader不需要其他属性时, 可以直接写loader字符串形式use: [ "style-loader","css-loader", "postcss-loader"// {// loader: "postcss-loader",// options: {// postcssOptions: {// plugins: [// "autoprefixer"// ]// }// }// }]},{test: /\.less$/,use: [ "style-loader", "css-loader", "less-loader", "postcss-loader" ]}]}
}
postcss.config.js
module.exports = {plugins: ["postcss-preset-env"]
}