这里重点讲一下path.resolve()。
看上面的例子,从右往左开始解析,所以一开始解析的就是 /abc.txt ,这个时候就会把它当成一个绝对路径了,为什么?因为看到斜杠/ 默认就把他当成根目录了。
console.log(path.resolve("./abc/cba", "./why/kobe", "/abc.txt"));
打印结果:
/abc.txt
那如果我们把 /abc.txt 前面加个点号. 会把 ./abc.txt 当成绝对路径吗?很明显不会。
console.log(path.resolve("./abc/cba", "./why/kobe", "./abc.txt"));
打印结果:看图片一眼就能看懂吧~
/Users/wangqiang/LEARN_NODE_WEBPACK_GIT/04_Path模块的使用/abc/cba/why/kobe/abc.txt
脚手架依赖webpack:
指定输入、输出的文件名:
npx webpack --entry ./src/main.js --output-filename bundle.js
效果是不是一目了然
也可以指定输出的打包的路径的文件名称(之前是dist目录下,现在改成其他的):
npx webpack --output-path ./build
会在当前目录下重新生成一个build目录,咱们看下效果:
那如果参数很多的情况下,是不是一个一个写特别麻烦,阅读性也特别差。
所以在真实的开发里面,我们会单独创建一个配置文件。
我们看下面的第九个标题~webpack配置文件。
需要注意的是,path是需要一个绝对路径,否则会报错。
配置完配置文件后,继续npx webpack,还是可以正常打包的。
# webpack.config.js
const path = require('path')
module.exports = {
entry: "./src/index.js",
output: {
filename: "bundle.js",
path: path.resolve(__dirname, "./build")
}
}
有小伙伴说如果我把webpack.config.js文件名称改成其他的可以吗?
当然可以,只不过需要在命令行再添加一个配置参数 --config
npx webpack --config wp.config.js
也可以把他放到package.json里面。 配置完之后然后命令行输入 npm run build。也就是下面说的第10小标题的内容。
我们先来一个案例模板:这段代码的作用是创建一个元素,并设置其文本内容为"Hello World",并添加一个名为"content"的CSS类名,然后将它添加到页面中。并且设置他的css。
写完这个案例之后,我们通过npm run build打包的时候报错了:
这是为什么呢?我们可以把di_cpn.js文件中的css导入代码先注释掉再重新打包,发现打包成功了。
所以我们找到原因了,是因为打包css的时候出错了。那回过头来我们看下具体报的是什么错误:
ERROR in ./src/css/div_style.css 1:0
Module parse failed: Unexpected token (1:0)
You may need an appropriate loader to handle this file type, currently no loaders are configured to process this file. See https://webpack.js.org/concepts#loaders
> .content {
| font-size: 20px;
| color: orange;
@ ./src/component/div_cpn.js 1:0-29
@ ./src/index.js 2:0-28
大概意思就是:你需要一个合适的loader去处理这种文件类型, 当前没有loaders去配置处理这个文件。
上面的错误信息告诉我们需要一个loader来加载这个css文件,但是loader是什么呢?
那么问题又来了,我们需要一个什么样的loader呢?
npm install css-loader -D
如何使用这个loader来加载css文件呢?有三种方式:
内联方式:
CLI方式:
loader配置方式 :
配置方式表示的意思是在我们的webpack.config.js文件中写明配置信息:
module.rules的配置如下:
const path = require("path")
module.exports = {
entry: "./src/index.js",
output: {
filename: "bundle.js",
path: path.resolve(__dirname, "./build"),
},
module: {
rules: [
{
// 告诉webpack你要匹配什么类型的文件
test: /\.css$/,
// 用什么loader去处理
use: [
{ loader: "css-loader" }
],
},
],
},
}
重新npm run build 打包的时候,发现是不是不会报错啦。
但是发现一个问题,是不是我设置的css样式没有生效。
我们已经可以通过css-loader来加载css文件了
这是为什么呢?
安装style-loader:
npm install style-loader -D
那么我们应该如何使用style-loader:
我在cpns.js文件中选择再创建一个h2元素,
然后通过less文件编写样式,再将less文件添加到webpack的依赖图里面。
然后我们打包的时候发现,less又跟之前打包css一样,webpack处理不了。
ERROR in ./src/css/title_style.less 1:0
Module parse failed: Unexpected character '@' (1:0)
You may need an appropriate loader to handle this file type, currently no loaders are configured to process this file. See https://webpack.js.org/concepts#loaders
> @fontSize: 50px;
| @fontColor: blue;
|
@ ./src/component/cpns.js 2:0-32
@ ./src/index.js 2:0-25
我们可以使用less工具来完成它的编辑转换;
npm install less -D
执行如下命令:
npx lessc ./src/css/title.less ttle.css
我们设置user-select: none,不让用户在页面上可以选中他,这个时候我们要考虑兼容性,设置浏览器前缀,我们一个个设置是不是比较麻烦,那有没有什么办法可以自动给我们加浏览器前缀。
此时可以通过postcss工具来实现。但是如果我们想在webpack中使用这个postcss工具,那我们还得需要postcss-loader。
当系统发现你在webpackage.config.js文件中没有配置插件时,他就会去postcss.config.js文件中找。
把配置信息单独放到一个文件中管理还有一个好处就是,如果我less文件是不是也需要浏览器前缀,那我们该怎么做?
我们只要在webpack.config.js配置文件中,针对less文件的配置规则中的use对应的数组中添加一下”postcss-loader“就行,因为配置信息放在单独的一个配置文件中,所以不需要每次都加一下options。
注意:我们在使用某些postcss插件时,也可以直接传入字符串 。