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文件内容:

// path模块是node中处理文件、目录的内置模块
const path = require("path")
const HtmlWebpackPlugin = require("html-webpack-plugin")
const { VueLoaderPlugin } = require("vue-loader")
module.exports = {// 配置页面入口 js 文件entry: "./src/main.js",// 配置打包输出相关output: {path: path.resolve(__dirname, "dist"),// __dirname:当前文件夹所在的绝对路径   path.resolve:在当前文件夹路径(__dirname)下拼接一个文件路径filename: "demo.js",clean: true // 在生成文件之前清空 output 目录},/*webpack 执行模式development:开发环境,它会在配置文件中插入调试相关的选项,比如 moduleId 使用文件路径方便调试production:生产环境,webpack 会将代码做压缩等优化*/mode: "development",watch: true, // watch监听文件变化,当它们修改后会重新编译module: {/*配置各种类型文件的加载器,称之为 loaderwebpack 当遇到 import ... 时,会调用这里配置的 loader 对引用的文件进行编译*/rules: [{/*使用 babel 编译 ES6 / ES7 / ES8 为 ES5 代码使用正则表达式匹配后缀名为 .js 的文件*/test: /\.js$/,// 排除 node_modules 目录下的文件,npm 安装的包不需要编译exclude: /node_modules/,/*use 指定该文件的 loader, 值可以是字符串或者数组。这里先使用 eslint-loader 处理,返回的结果交给 babel-loader 处理。loader 的处理顺序是从最后一个到第一个。eslint-loader 用来检查代码,如果有错误,编译的时候会报错。babel-loader 用来编译 js 文件。*/use: ['babel-loader', 'eslint-loader']},{// 匹配 html 文件test: /\.html$/,/*使用 html-loader, 将 html 内容存为 js 字符串,比如当遇到import htmlString from './template.html';template.html 的文件内容会被转成一个 js 字符串,合并到 js 文件里。*/use: 'html-loader'},{// 匹配 css 文件test: /\.css$/,/*先使用 css-loader 处理,返回的结果交给 style-loader 处理。css-loader 将 css 内容存为 js 字符串,并且会把 background, @font-face 等引用的图片,字体文件交给指定的 loader 打包,类似上面的 html-loader, 用什么 loader 同样在 loaders 对象中定义,等会下面就会看到。*/use: ['style-loader', 'css-loader']},{/*匹配各种格式的图片和字体文件上面 html-loader 会把 html 中 <img> 标签的图片解析出来,文件名匹配到这里的 test 的正则表达式,css-loader 引用的图片和字体同样会匹配到这里的 test 条件*/test: /\.(png|jpg|jpeg|gif|eot|ttf|woff|woff2|svg|svgz)(\?.+)?$/,/*使用 url-loader, 它接受一个 limit 参数,单位为字节(byte)当文件体积小于 limit 时,url-loader 把文件转为 Data URI 的格式内联到引用的地方当文件大于 limit 时,url-loader 会调用 file-loader, 把文件储存到输出目录,并把引用的文件路径改写成输出后的路径比如 views/foo/index.html 中<img src="smallpic.png">会被编译成<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAA...">而<img src="largepic.png">会被编译成<img src="/f78661bef717cf2cc2c2e5158f196384.png">*/use: [{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}},/*配置 webpack 插件plugin 和 loader 的区别是,loader 是在 import 时根据不同的文件名,匹配不同的 loader 对这个文件做处理,而 plugin, 关注的不是文件的格式,而是在编译的各个阶段,会触发不同的事件,让你可以干预每个编译阶段。*/plugins: [/*html-webpack-plugin 用来打包入口 html 文件entry 配置的入口是 js 文件,webpack 以 js 文件为入口,遇到 import, 用配置的 loader 加载引入文件但作为浏览器打开的入口 html, 是引用入口 js 的文件,它在整个编译过程的外面,所以,我们需要 html-webpack-plugin 来打包作为入口的 html 文件*/new HtmlWebpackPlugin({title: "vue demo",template: "index.html"}),new VueLoaderPlugin()],devServer: {static: path.resolve(__dirname, "static"),hot: true, // 热重载open: true, // 自动打开浏览器port: 9000 // 端口}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/186557.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux——手把手教你解决sudo指令无法使用的问题

解决sudo指令无法使用的问题 1. 为什么不能使用 sudo指令能够使某一条指令拥有root权限&#xff0c;即以root权限去执行 例如&#xff1a; sudo ls -l //就是以root权限查看当前目录里的内容但是&#xff0c;如果是新创建的普通账户&#xff0c;一般来说一开始是不能执行s…

访问控制列表

目录 ACL ACL原理 ACL包过滤方式 ACL通用命令 查看ACL表命令 删除整张表命令 接口配置ACL ACL分类 标准ACL 标准ACL的动作与条件 通配符掩码 扩展ACL 扩展ACL的动作与条件 命名ACL 前言 书写方式 ACL 含义&#xff1a;访问控制列表&#xff0c;其是一种包过滤…

计算机基础知识49

三板斧的使用(views.py) 三个方法&#xff1a;HttpResponse: 返回的是字符串render : 返回html文件redirect : 返回加载HTML页面的 def html(request):print(from html)# return HttpResponse(request) # 它返回的是字符串return render(request,html.html) # 返回html# ret…

Jenkins CICD过程常见异常

1 Status [126] Exception when publishing, exception message [Exec exit status not zero. Status [126] 1.1 报错日志 SSH: EXEC: STDOUT/STDERR from command [/app/***/publish.sh] ... bash: /app/***/publish.sh: Permission denied SSH: EXEC: completed after 200…

媒体转码软件Media Encoder 2024 mac中文版功能介绍

Media Encoder 2024 mac是一款媒体转码软件&#xff0c;它可以将视频从一种格式转码为另一种格式&#xff0c;支持H.265、HDR10等多种编码格式&#xff0c;同时优化了视频质量&#xff0c;提高了编码速度。此外&#xff0c;Media Encoder 2024还支持收录、创建代理和输出各种格…

openEuler 系统使用 Docker Compose 容器化部署 Redis Cluster 集群

openEuler 系统使用 Docker Compose 容器化部署 Redis Cluster 集群 Redis 的多种模式Redis-Alone 单机模式Redis 单机模式的优缺点 Redis 高可用集群模式Redis-Master/Slaver 主从模式Redis-Master/Slaver 哨兵模式哨兵模式监控的原理Redis 节点主客观下线标记Redis 节点主客观…

使用Nginx和Spring Gateway为SkyWalking的增加登录认证功能

文章目录 1、使用Nginx增加认证。2、使用Spring Gateway增加认证 SkyWalking的可视化后台是没有用户认证功能的&#xff0c;默认下所有知道地址的用户都能访问&#xff0c;官网是建议通过网关增加认证。 本文介绍通过Nginx和Spring Gateway两种方式 1、使用Nginx增加认证。 生…

晶振分频【FPGA】

所有数据对齐晶振。 6分频&#xff1a;【1】 module divider_six // 6分频 【0~2】 ( input wire sys_clk , //系统时钟 50MHz input wire sys_rst_n , //全局复位 output reg clk_out //对系统时钟 6 分频后的信号 );reg [1:0] cnt; //用于计数的寄存器 //cnt:计数器从 0 到…

Flink -- 事件时间 Watermark

1、事件时间&#xff1a; 指的是数据产生的时间或是说是数据发生的时间。 在Flink中有三种时间分别是&#xff1a; Event Time&#xff1a;事件时间&#xff0c;数据产生的时间&#xff0c;可以反应数据真实发生的时间 Infestion Time&#xff1a;事件接收时间 Processing Tim…

远程运维如何更高效的远程管理?向日葵的这几项功能会帮到你

具备一定规模的企业&#xff0c;其IT运维需求普遍会面临设备数量众多、难以统一高效管理、始终存在安全敞口等问题&#xff0c;尤其是针对分部广泛的无人值守设备时&#xff0c;更是如此。 举一个简单的例子&#xff0c;一台位于商圈的无人值守可互动广告机设备&#xff0c;所…

【MySQL习题】各个视频的平均完播率【全网最详细教学】

目录 数据表描述 问题描述 输出示例 解题思路【重点】 正解代码 数据表描述 有以下两张表&#xff1a; 表1&#xff1a;用户-视频互动表tb_user_video_log 数据举例&#xff1a; 说明&#xff1a; uid-用户ID,video_id-视频ID start_time-开始观看时间end_time-结束观…

【Python3】【力扣题】258. 各位相加

【力扣题】题目描述&#xff1a; 【Python3】代码&#xff1a; 1、解题思路&#xff1a;将整数转为字符串&#xff0c;遍历字符串中的数字&#xff0c;求和。 知识点&#xff1a;str(...)&#xff1a;转为字符串。为了遍历每个数字。 int(...)&#xff1a;转为整数。为了数字…

三菱FX3U系列-定位指令

目录 一、简介 二、指令形式 1、相对定位[DRVI、DDRVI] 2、绝对定位[DRVA、DDRVA] 三、总结 一、简介 定位指令用于控制伺服电机或步进电机的位置移动。可以通过改变脉冲频率和脉冲数量来控制电机的移动速度和移动距离&#xff0c;同时还可以指定移动的方向。 二、指令形…

带你一分钟看懂 “kubernetes”

目录 什么是 Kubernetes Kubernetes 概述 为什么需要 Kubernetes&#xff0c;它能做什么&#xff1f; 什么是 Kubernetes 从官方网站上可以看到&#xff0c;它是一个工业级的容器编排平台。Kubernetes 这个单词是希腊语&#xff0c;它的中文翻译是“舵手”或者“飞行员”。在…

互联网金融P2P主业务场景自动化测试

互联网金融P2P行业&#xff0c;近三年来发展迅速&#xff0c;如火如荼。 据不完全统计&#xff0c;全国有3000的企业。 “互联网”企业&#xff0c;几乎每天都会碰到一些奇奇怪怪的bug&#xff0c;作为在互联网企业工作的测试人员&#xff0c;风险和压力都巨大。那么我们如何降…

python用tkinter随机数猜数字大小

python用tkinter随机数猜数字大小 没事做&#xff0c;看到好多人用scratch做的猜大小的示例&#xff0c;也用python的tkinter搞一个猜大小的代码玩玩。 猜数字代码 from tkinter import * from random import randint# 定义确定按钮的点击事件 def hit(x,y):global s_Labprint(…

CCF ChinaSoft 2023 论坛巡礼 | 云计算标准化论坛

2023年CCF中国软件大会&#xff08;CCF ChinaSoft 2023&#xff09;由CCF主办&#xff0c;CCF系统软件专委会、形式化方法专委会、软件工程专委会以及复旦大学联合承办&#xff0c;将于2023年12月1-3日在上海国际会议中心举行。 本次大会主题是“智能化软件创新推动数字经济与社…

DHorse(K8S的CICD平台)的实现原理

综述 首先&#xff0c;本篇文章所介绍的内容&#xff0c;已经有完整的实现&#xff0c;可以参考这里。 在微服务、DevOps和云平台流行的当下&#xff0c;使用一个高效的持续集成工具也是一个非常重要的事情。虽然市面上目前已经存在了比较成熟的自动化构建工具&#xff0c;比如…

this.$message提示内容添加换行

0 效果 1 代码 let msgArr [只允许上传doc/docx/xls/xlsx/pdf/png/jpg/bmp/ppt/pptx/rar/zip格式文件,且单个文件大小不能超过20MB,已过滤无效的文件] let msg msgArr.join(<br/>) this.$message({dangerouslyUseHTMLString: true,message: msg,type: warning })

linux系统,确认账户密码正确

linux系统&#xff0c;确认账户密码正确 1、问题背景2、解决方法 1、问题背景 有时在linux系统安装软件时&#xff0c;有的软件可能会在安装过程中创建系统用户&#xff0c;同时会给出这个用户的密码。过了一段时间我们不确定这个密码是否还正确&#xff0c;那怎么确认这个密码…