webpack最基本的使用方式
Posted lucien_jun
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了webpack最基本的使用方式相关的知识,希望对你有一定的参考价值。
1.创建文件夹"webpack-study"
2.使用webstrom打开文件夹所在位置。在根目录上创建一个文件,文件命名为“src”,在src文件下新建css、images、js文件夹,在src文件夹下新建index.html文件
和main.js文件
3.现在我们需要完成一个隔行变色的需求,来熟悉webpack的使用过程。在index.html文件下添加6个li
4.我准备使用jquery来完成隔行变色.首先初始化webpack,在终端输入“cnpm init -y”.在根目录下会生成一个package.json的文件,里面是相应的配置信息
5.通过webpack来安装jquery。在终端输入"cnpm i jquery -S",
成功之后,根目录下会生成一个“node_modules”的文件夹
6.在“main.js”中通过import $ from \'jquery\'来导入模块
7.在index.html中引入main.js文件,写的效果在浏览器中并没有生效。import语法太高级,浏览器没办法识别。这个时候我们就必须通过webpack处理一下,打包出来一个文件。在终端中输入"webpack ./src/main.js -o ./dist/bundle.js" 补充:版本高之后,命令需要修改为 webpack ./src/main.js-o ./dist/bundle.js --mode development
文件夹中也生成出来dist文件夹和bundle.js文件
但是终端报了一个警告
黄色部分的警告的意思是,没有设置模式,有开发模式和生产模式两种,接下来,找到package.json.添加上"dev"和"build"这两个信息以及他们的值.
"scripts": {
"test": "echo \\"Error: no test specified\\" && exit 1",
"dev": "webpack --mode development",
"build": "webpack --mode production"
},
在根目录上新建“webpack-config.js”文件
问题得到解决
8.index.html引入bundle.js文件,浏览器正常显示效果
通过这个小栗子我们能发现webpack能够解决js文件之间相互的依赖关系 ;还能够处理js的兼容问题,把高级的、浏览器不识别的语法转为低级的、浏览器能正常识别的语法
9.修改main.js中li奇数行背景色,我们想在浏览器上看修改之后的效果,是否一直需要在终端中输入"webpack .\\src\\main.js -o .\\dist\\bundle.js"呢?我们能否直接输入“webpack”就能达到我们想要的效果呢?
10.在终端中输入"webpack"
弹出提示是否安装“webpack-cli”,输入“no”之后,自己在终端“cnpm install webpack-cli -g”。安装成功之后,在终端输入“webpack”依然弹出上面的提示
11.在终端输入"cnpm install webpack -d" "cnpm install webpack-cli -d",然后在终端输入webpack成功。
12.在根目录下新建“webpack.config.js”配置文件,由于运行webpack命令的时候,webpack需要指定入口文件和输出文件的路径,所以,我们需要在`webpack.config.js`中配置这两个路径:
补充说明:安装webpack-dev-server版本可能和webpack版本冲突。需要先卸载
cnpm uninstall webpack
cnpm uninstall webpack-dev-server
然后重新安装兼容的版本
cnpm install webpack@版本号 --save -dev
cnpm install webpack-dev-server@版本号 --save -dev
2.使用“webpack-dev-server”这个工具,来实现自动打包编译的功能
2.1运行 “cnpm i webpack-dev-server -D”把这个工具安装到项目的本地开发依赖
2.2安装完毕后,这个工具的用法,和webpack命令的用法完全一样
2.3由于我们是在项目中安装的webpack-dev-server,所以无法把它当做脚本命令,在终端中直接运行。只有那些安装到全局-g的工具,才能运行
2.4在package.json中添加“dev”:"webpack-dev-server"
2.5注意:webpack-dev-server这个工具,如果想要正常运行,要求本地项目中,必须安装webpack
2.6webpack-dev-server帮我们打包生成的bundle.js文件,并没有存放在实际的物理磁盘上,而是直接托管到了电脑内存中(好处:由于需要实时打包编译,所以放在内存中速度会非常快)
修改index页面中script的src属性为`<script src="bundle.js"></script>`
3.把html也放在电脑内存中 “cnpm i html-webpack-plugin -D”安装到开发依赖
修改`webpack.config.js`配置文件如下:
```
// 导入处理路径的模块
var path = require(\'path\');
// 导入自动生成HTMl文件的插件
//只要是插件,都一定要放到webpack.config.js中的plugins节点中去
var htmlWebpackPlugin = require(\'html-webpack-plugin\');
//这个插件的两个作用:1.自动在内存中根据指定页面生成一个内存的页面 2.自动把打包好的bundle.js追加到页面中去
module.exports = { entry: path.join(__dirname, \'src/js/main.js\'), // 项目入口文件 output: { // 配置输出选项 path: path.join(__dirname, \'dist\'), // 配置输出的路径 filename: \'bundle.js\' // 配置输出的文件名 }, plugins:[ // 添加plugins节点配置插件 new htmlWebpackPlugin({ template:path.join(__dirname, \'src/index.html\'),//模板路径 filename:\'index.html\'//自动生成的HTML文件的名称 }) ] }
将index.html中script标签注释掉,因为`html-webpack-plugin`插件会自动把bundle.js注入到index.html页面中!
## 实现自动打开浏览器、热更新和配置浏览器的默认端口号
**注意:热更新在JS中表现的不明显,可以从一会儿要讲到的CSS身上进行介绍说明!**
### 方式1:
+ 修改`package.json`的script节点如下,其中`--open`表示自动打开浏览器,`--port 4321`表示打开的端口号为4321,`--hot`表示启用浏览器热更新:
```
"dev": "webpack-dev-server --hot --port 4321 --open chrome --contentBase src"
```
webpack默认只能打包处理JS类型的文件,无法处理其他非JS类型的文件;如果非要处理非JS类型的文件,我们需要手动安装一些合适第三方loader加载器
因为传统的link加载css样式会发起二次请求,所以我们需要在webpack中使用loader加载css样式
在main.js中,通过import \'./css/index.css\'引入包
如果想要打包处理css文件,需要安装cnpm i style-loader css-loader -D (注意点:style-loader css-loader版本问题)
修改`webpack.config.js`这个配置文件:
```
module: { // 用来配置第三方loader模块的 rules: [ // 文件的匹配规则 { test: /\\.css$/, use: [\'style-loader\', \'css-loader\'] }//处理css文件的规则 ] }
```webpack处理第三方文件类型的过程:
1.发现这个要处理的文件不是JS文件,然后就去配置文件中,查找有没有对应的第三方loader规则
2.如果能找到对应的规则,就会调用对应的loader处理这种文件类型;
3.在调用loader的时候,是从后往前调用的
4.当最后的一个loader调用完毕,会把处理的结果,直接交给webpack进行打包合并,最终输出到bundle.js中去
3. 注意:`use`表示使用哪些模块来处理`test`所匹配到的文件;`use`中相关loader模块的调用顺序是从后向前调用的;
## 使用webpack打包less文件
0.在main.js中通过import \'./css/index.less\'导入
1. 运行`cnpm i less-loader less -D`
cnpm install less-loader@4.1.0
2. 修改`webpack.config.js`这个配置文件:
```
{ test: /\\.less$/, use: [\'style-loader\', \'css-loader\', \'less-loader\'] },
```
## 使用webpack打包sass文件
1. 运行`cnpm i sass-loader node-sass --save-dev`
npm install node-sass@4.14.1
1.1 在main.js中通过import \'文件相对路径\';来引入文件 2. 在`webpack.config.js`中添加处理sass文件的loader模块: ``` { test: /\\.scss$/, use: [\'style-loader\', \'css-loader\', \'sass-loader\'] }
```
## 使用webpack处理css中的路径
1. 运行`cnpm i url-loader file-loader --save-dev` 2. 在`webpack.config.js`中添加处理url路径的loader模块: ``` { test: /\\.(png|jpg|gif)$/, use: \'url-loader\' } ``` 3. 可以通过`limit`指定进行base64编码的图片大小;只有小于指定字节(byte)的图片才会进行base64编码:limit的数值大于等于图片的字节,图片才会进行base64编码,保证图片不进行base64转化,文件名还是原来的文件名 ``` { test: /\\.(png|jpg|gif)$/, use: \'url-loader?limit=43960&name:[name]-[ext]\' },
使用webpack处理字体文件
webpack引入bootstrap字体图标,字体图标不出来的原因:
因为当前bootstrap版本是最新版本4以上,图标和样式分离了
解决方案:
npm i bootstrap@3
通过安装bootstrap
cnpm i bootstrap -D
在main.js中通过import \'bootstrap/dist/css/bootstrap.css\'
在webpack.config.js中配置
{test:/\\.(ttf|eot|svg|woff|woff2)$/,use:\'url-loader\'}
```
安装时一直报错
解决办法:“cnpm i babel-loader@7.1.5 -D” 完美解决
默认webpack无法打包.vue文件,需要安装相关的loader
"cnpm i vue-loader vue-template-compiler -D"
在配置文件中新增loader配置项{test:/\\.vue$/,use:\'vue-loader\'}
启动项目报错
解决方法:Vue Loader v15 现在需要配合一个 webpack 插件才能正确使用:
在webpack.config.js添加以下的代码,即可
// webpack.config.js
const VueLoaderPlugin = require(‘vue-loader/lib/plugin’)
module.exports = {
plugins: [
new VueLoaderPlugin()
]
}
以上是关于webpack最基本的使用方式的主要内容,如果未能解决你的问题,请参考以下文章