当前位置: 首页 > news >正文

webpack的简单使用

什么是webpack(去官网看详细的API)

本质上,webpack 是一个用于现代 JavaScript 应用程序的 静态模块打包工具。当 webpack 处理应用程序时,它会在内部从一个或多个入口点构建一个 依赖图(dependency graph),然后将你项目中所需的每一个模块组合成一个或多个 bundles,它们均为静态资源,用于展示你的内容

 使用webpack完成简单的vue搭建:

1、新建vue项目(前提是node.js已经下载安装)

执行  npm init // 生成package.json文件

2、安装webpack  webpack-cli和手动创建webpack.config.js文件

npm install webpack webpack-cli --save-dev

3、创建webpack.config.js文件

 4、引入vue2  新建src/main.js  和index.html文件

npm install vue@2.7.14// src/main.js文件内容import Vue from 'vue'
var vm = new Vue({el:'#app',data:{msg:'hello vue'}
})// index.html文件内容<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>vueWebpackDemo</title>
</head>
<body><div id="app">{{msg}}</div>
</body>
</html>

5、引入babel 

npm install --save-dev babel-core babel-loader

 将babel加入到webpack.config.js配置文件中

module: {rules: [{test: /\.js$/,loader: "babel-loader",exclude: /node_modules/}]
}

6、执行webpack,就可以完成一次简单的使用webpack手动搭建vue项目

webpack的常用配置:

HtmlWebpackPlugin插件(复制index.html)。

作用:编译时自动在dist的目录中创建一个html文件并将Index.html中的内容复制过去 

npm install --save-dev html-webpack-plugin

在webpack.config.js文件中添加如下配置:

const HtmlWebpackPlugin = require('html-webpack-plugin')plugins:[new HtmlWebpackPlugin()
]

 webpack-dev-server插件(实时加载):

作用:提供了一个简单的web服务器,能够实时重新加载。无须在浏览器中直接打开文件(我们实际开发中将代码部署在 server中,而不是在浏览器中直接打开文件)

npm install --save-dev webpack-dev-server

在webpack.config.js文件中添加如下配置,以告知webpack-dev-server, 在localhost:xxx下建立服务,将 dist 目录下的文件,作为可访问文件。

devServer: {static: path.resolve(__dirname, "static"),hot: true, // 开启热加载open: true, // 直接打开浏览器port: 9000 // 端口号}

在package.json中添加一个script脚本以直接运行开发服务器(dev server)

 执行npm run dev命令,浏览器将会自动打开页面,成功启动服务。

css加载器(css-loader和style-loader):

npm install --save-dev css-loader style-loader

在webpack.config.js中进行如下配置:

 module: {rules: [{test: /\.css$/,use: ["style-loader", "css-loader"]}]},

新建src/styles/index.css文件,并在main.js中引入

 

执行npm run dev 查看浏览器

图片资源和字体的加载
说明:

url-loader是基于file-loader的封装,故需引入file-loader。url-loader解决图片较多时过多http请求导致页面性能降低的问题,将引入的图片编码,生成dataURl。相当于把图片数据翻译成一串字符,再把这串字符打包到文件中,最终只需要引入这个文件就能访问图片了

npm install --save-dev file-loader url-loader

在webpack.config.js文件中添加如下配置:

{test:/\.(png|jpe?g|gif|svg)(\?.*)?$/,loader: 'url-loader',options: {limit: 10000,esModule: false}
},
{test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/,loader: 'url-loader',options: {limit: 10000}
}

在src/images/中添加图片,并在main.js文件中引入:

 

vue-loader

说明:在vue的开发过程中,通常我们需要写.vue结尾的文件即组件,这类文件需要通过 vue-loader 来加载,vue-template-compiler来编译

npm install --save-dev vue-loader@15.9.8 vue-template-compiler

 这里需要注意,vue的版本需要跟vue-template-compiler版本一致,否则会报错:TypeError: Cannot read property ‘parseComponent‘ of undefined

在webpack.config.js文件中添加:

const { VueLoaderPlugin } = require('vue-loader')
…
module: {rules: [{test: /\.vue$/,loader: 'vue-loader'}]
},…
plugins:[new VueLoaderPlugin()
]

创建app.vue,和修改main.js、index.html文件

 简单的完整的webpack.config.js文件内容:

const path = require("path")
const HtmlWebpackPlugin = require("html-webpack-plugin")
const { VueLoaderPlugin } = require("vue-loader")
module.exports = {entry: "./src/main.js",output: {path: path.resolve(__dirname, "dist"),filename: "demo.js",clean: true // 在生成文件之前清空 output 目录},mode: "development",watch: true, // watch监听文件变化,当它们修改后会重新编译module: {rules: [{test: /\.js$/,loader: "babel-loader",exclude: /node_modules/},{test: /\.css$/,use: ["style-loader", "css-loader"]},{test: /\.(png|jpe?g|gif|svg)(\?.*)?$/,loader: "url-loader",options: {limit: 10000,esModule: false}},{test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/,loader: "url-loader",options: {limit: 10000}},{test: /\.vue$/,loader: "vue-loader"}]},resolve: {alias: {vue$: "vue/dist/vue.esm.js" // 'vue/dist/vue.common.js' for webpack 1}},plugins: [new HtmlWebpackPlugin({title: "vue demo",template: "index.html"}),new VueLoaderPlugin()],devServer: {static: path.resolve(__dirname, "static"),hot: true, // 热重载open: true, // 自动打开浏览器port: 9000 // 端口}
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • python---类与对象
  • 2023 全栈工程师 Node.Js 服务器端 web 框架 Express.js 详细教程(更新中)
  • security实战
  • ActiveMQ、RabbitMQ、RocketMQ、Kafka介绍
  • java项目之个人健康信息管理(ssm+jsp)
  • kubernetes存储-volumes
  • 各种NoSQL数据库
  • CSAPP第4章:RISC和CISC指令集
  • [POI2006] OKR-Periods of Words——最大周期长度(扩展最小周期长度)
  • could not read ok from ADB Server
  • linux生产者消费者模型
  • 大语言模型(LLM)综述(六):大型语言模型的基准和评估
  • 基于springboot+vue的影城管理系统
  • C嘎嘎之类和对象下
  • @Bean有哪些属性
  • #Java异常处理
  • 345-反转字符串中的元音字母
  • ABAP的include关键字,Java的import, C的include和C4C ABSL 的import比较
  • C++类中的特殊成员函数
  • Fastjson的基本使用方法大全
  • iOS | NSProxy
  • JavaScript-Array类型
  • java多线程
  • JS变量作用域
  • SpiderData 2019年2月25日 DApp数据排行榜
  • springboot_database项目介绍
  • storm drpc实例
  • Stream流与Lambda表达式(三) 静态工厂类Collectors
  • 对超线程几个不同角度的解释
  • - 概述 - 《设计模式(极简c++版)》
  • 工作手记之html2canvas使用概述
  • 基于web的全景—— Pannellum小试
  • 简单基于spring的redis配置(单机和集群模式)
  • 坑!为什么View.startAnimation不起作用?
  • 快速构建spring-cloud+sleuth+rabbit+ zipkin+es+kibana+grafana日志跟踪平台
  • 小程序开发之路(一)
  • “十年磨一剑”--有赞的HBase平台实践和应用之路 ...
  • Spring第一个helloWorld
  • 摩拜创始人胡玮炜也彻底离开了,共享单车行业还有未来吗? ...
  • 支付宝花15年解决的这个问题,顶得上做出十个支付宝 ...
  • #我与Java虚拟机的故事#连载07:我放弃了对JVM的进一步学习
  • (C#)获取字符编码的类
  • (Pytorch框架)神经网络输出维度调试,做出我们自己的网络来!!(详细教程~)
  • (苍穹外卖)day03菜品管理
  • (二)基于wpr_simulation 的Ros机器人运动控制,gazebo仿真
  • (附源码)springboot 智能停车场系统 毕业设计065415
  • (附源码)springboot宠物管理系统 毕业设计 121654
  • (附源码)ssm考生评分系统 毕业设计 071114
  • (附源码)计算机毕业设计SSM在线影视购票系统
  • (函数)颠倒字符串顺序(C语言)
  • (南京观海微电子)——I3C协议介绍
  • (三)c52学习之旅-点亮LED灯
  • (四)Tiki-taka算法(TTA)求解无人机三维路径规划研究(MATLAB)
  • (算法)区间调度问题
  • (五)IO流之ByteArrayInput/OutputStream