Vue 基础 day05 webpack 3.x
什么是webpack
webpack 是前端的一个项目构建工具, 它是基于 Node.js 开发出来的一个前端工具
借助于webpack这个前端自动化构建工具, 可以完美实现资源的合并、打包、压缩、混淆等诸多功能
webpack安装的两种方式
$ npm install webpack -g 全局安装
$ npm install webpack --save-dev 下载开发版本
$ npm install wabpack@3.8.1 下载指定版本
使用webpack 打包构建隔行变色案例
- 运行
npm init
初始化项目, 使用 npm 管理项目中的依赖包; - 创建项目基本目录
- 使用
npm install jquery --save
安装类库 - 创建
main.js
书写隔行变色案例
import $ from 'jquery'
$('#list li:even').css('backgroundColor', 'red');
$('#list li:odd').css('backgroundColor', 'yellow');
- 直接在
index.html
中引用会报错, 因为浏览器不认识import
这种高级的js语法, 需要使用webpack进行处理, webpack默认会把这种高级的语法转换为浏览器可以识别的语法; - 运行 命令
webpack 入口文件路径 输出文件路径
$ webpack ./src/main.js ./dist/bundle.js
- 此时引入打包好的文件就可以使用啦
使用 webpack 的配置文件简化打包命令
- 在项目根目录下创建
webpack.config.js
- 由于运行 webpack 命令的时候, webpack 需要指定入口文件和输出文件的路径, 所以我们需要在
webpack.config.js
中配置这两个路径;
// 导入路径模块
const path = require('path')
// 导出一个配置对象, 将来webpack在启动的时候, 会默认查找webpack.config.js, 并读取这个文件中的配置对象, 来进行打包处理
module.exports = {
entry: path.join(__dirname, '/src/main.js'), // 项目入口文件
output: { // 配置出口选项
path: path.join(__dirname, '/dist'), // 配置输出路径
filename: 'bundle.js' // 配置输出文件
}
}
使用 webpack 打包的两种方式
配置 package.json 文件
- 安装 webpack-dev-server 工具
$ npm install webpack-dev-server -D
$ npm install webpack-dev-server@2.9.3 -D
注意:
1. webpack-dev-server 会在项目的根目录下虚拟一个bundle.js, 注意引用
2. webpack-dev-server 依赖于 webpack 所以 一定要安装 webpack
- 在 scripts 键下 在增加一个键
"dev": "webpack-dev-server"
补充:
--open 自动打开浏览器
--port 3000 指定浏览器端口
--contentBase src 指定打开路径
--hot 热重载, 热更新
webpack-dev-server --open --port 3000 --contentBase src --hot
- cmd 下执行
$ npm run dev
配置 webpack.config.js 文件
- 配置文件下新增 键值对
devServer: {
open: true,
port: 3000,
contentBase: 'src',
hot: true
}
- 导入 webpack 包
const webpack = require('webpack')
- 配置文件下 新增键值对
plugins: [
new webpack.HotModuleReplacementPlugin()
]
- package.json 的 scripts 下 新增一个键
"dev": "webpack-dev-server"
使用 html-webpack-plugin 插件 把 html 放到 内存中去
- 下载 html-webpack-plugin 插件
$ npm install html-webpack-plugin -D
- 在 config.webpack.js 中增加配置项
注意: 只要是插件 就放到 plugins 组件中
// 1. 在内存中创建模板
// 2. 不需要引用 bundle.js 文件
// 3. 把打包好的 bundle.js 文件 自动追加到 html 页面中去
const htmlWebpackPlugin = require('html-webpack-plugin')
module.exports = {
plugins: [
new htmlWebpackPlugin({ // 创建 插件
template: path.join(__dirname, '/src/index.html'), // 指定模板页面, 会根据路径生成到内存中去
filename: 'index.html' // 模板文件
})
]
}
使用 第三方插件打包 JS 以外的资源文件
webpack 默认之鞥呢处理打包 js 文件 如果需要处理其他文件, 需要手动安装一些 loader 加载器
处理 打包 css 文件
$ npm inatll style-loader css-loder -D
处理 打包 less 文件
$ npm install less-loader less -D
处理 打包 scss 文件
$ npm install sass-loader node-sass -D
配置文件中 配置这些 资源
module.exports = {
module: { // 这个节点 用于配置 所有第三方模块加载器
rules: [ // 所有的第三方模块匹配规则
// 配置处理 css 匹配规则
{test: '/\.css$/', use: ['style-loader', 'css-loader']},
// 配置处理 less 匹配规则
{test: '/\.less$/', use: ['style-loader', 'css-loader', 'less-loader']},
// 配置出路 scss 匹配规则
{test: '/\.scss$/', use: ['style-loader', 'css-loader', 'sass-loader']}
]
}
};
处理过程:
1. 发现要处理的文件不是 js 文件, 然后去配置文件中查找, 有没有对应的第三方 loader 规则
2. 如果有, 就会调用对应的 loader 处理这种文件类型
3. 在调用 loader 的时候, 从右往左调用
4. 最后的 loader 调用完毕, 会把最后的结果交给 webpack 打包合并, 最终输出到 bundle.js 中
处理 css 中的路径
- 下载依赖 url-loader 也可以处理字体文件
$ npm install url-loader file-loader -D
- rules 下 新增一个配置项
注意: 参数拼接和get请求拼接一致
// 通过limit指定进行base64编码图片大小, 小于图片字节就会进行base64编码
{ test: '/\.(jpg|png|gif)$/', use: 'url-loader?limit=1024' }
// 小于1024编码为base64, hash8位字符 拼接 原图片名以及后缀名
limit=1024&[hash:8]-[name].[ext]
使用 babel 处理高级的 js 语法
webpack 默认只是支持部分 ES6 的语法, 并不是全部支持, 所以我们需要下载一些工具, 来支持更高的 JS 语法 (ES6, ES7)
- 安装 babel 相关的 loader 包
$ npm install babel-loader babel-core babel-plugin-transfrom-runtime -D
- 安装 babel 转换语法相关的包
$ npm install babel-preset-env babel-preset-stage-0 -D
- webpack.config.js 中 增加配置项
module.exports = {
module: {
rules: [
{ path: /\.js$/, use: 'babel-loader', exclude: /node_modules/ }
]
}
}
- 项目的根目录下 增加一个
.babelrc
文件 此文件必须遵循json
规范
{
"presets": ["env", "stage-0"],
"plugins": ["transform-runtime"]
}
补充: 自己在安装的时候, 遇到的问题
按照以上命令执行完毕后, 重新启动项目 发现报错了, 最后看报错信息得知, 是因为 babel-loader 的版本下高了 最后按照提示, 下载了底一个版本的 babel-loader 就可以重新启动项目了;
相关文章
babel-preset-env:你需要的唯一Babel插件
Runtime transform 运行时编译es6
Vue 基础 day05 webpack 3.x的更多相关文章
- Vue 基础 day06 webpack 3.x 结合vue
在普通页面使用 render 函数渲染组件 var login = { template: '<h3>login</h3>' } var vm = new Vue({ // c ...
- Vue 2.x + Webpack 3.x + Nodejs 多页面项目框架(下篇——多页面VueSSR+热更新Server)
Vue 2.x + Webpack 3.x + Nodejs 多页面项目框架(下篇--多页面VueSSR+热更新Server) @(HTML/JS) 这是Vue多页面框架系列文章的第二篇,上一篇(纯前 ...
- Vue基础及脚手架环境搭建
From:http://www.jianshu.com/p/dc5057e7ad0d 一.vue基础 “Vue2.0”跟俺一起全面入坑 01 “Vue2.0”跟俺一起全面入坑 02 “Vue2.0”跟 ...
- Vue工程模板文件 webpack打包
1.github github地址:https://github.com/MengFangui/VueProjectTemplate 2.webpack配置 (1)基础配置webpack.base.c ...
- Vue基础项目模板
https://github.com/wanglong/vue-element-admin.git 优化 Vue CLI 3 构建的前端项目模板(1)- 基础项目模板介绍 一站式开源运维平台,分享给大 ...
- vue - vue基础/vue核心内容
终于算是顺利进入vue了,确实也只有学了过后才知道,之前三过vue而不学,确实是对的,现在进来了一点都不后悔,ajax.node.js.promise.webpack.git等等确实是除了三大基础外还 ...
- Vue 2.x + Webpack 3.x + Nodejs 多页面项目框架(上篇——纯前端多页面)
Vue 2.x + Webpack 3.x + Nodejs 多页面项目框架(上篇--纯前端多页面) @(HTML/JS) 一般来说,使用vue做成单页应用比较好,但特殊情况下,需要使用多页面也有另外 ...
- vue+node.js+webpack开发微信公众号功能填坑——v -for循环
页面整体框架实现,实现小功能,循环出数据,整体代码是上一篇 vue+node.js+webpack开发微信公众号功能填坑--组件按需引入 修改部门代码 app.vue <yd-flexbox&g ...
- 从壹开始前后端分离 [ Vue2.0+.NET Core2.1] 十八║Vue基础: 指令(下)+计算属性+watch
回顾 今天来晚辣,给公司做了一个小项目,一个瀑布流+动态视频控制的DEMO,有需要的可以联系我,公司的项目就不对外展示了(一个后端程序员真的要干前端了哈哈哈). 书接上文,昨天正式的开始了Vue的代码 ...
随机推荐
- 合肥学院ACM集训队第一届暑假友谊赛 B FYZ的求婚之旅 D 计算机科学家 F 智慧码 题解
比赛网址:https://ac.nowcoder.com/acm/contest/994#question B FYZ的求婚之旅 思路: 然后用快速幂即可. 细节见代码: #include <i ...
- linux tomcat 中文文件上传乱码
找到tomcat文件夹下的conf/server.xml,在connector节点下新增URIEncoding="utf-8"参数 <Connector connection ...
- 小程序里的自定义组件:组件的外部样式externalClasses的使用
启用外部样式: 自定义组件: v-tag 在html 引入 在组件写外部样式的css : .ex-tag { background-color: #fffbdd ; } 在组件使用该外部的样式 这个时 ...
- 谷歌将用QUIC传输层技术加速互联网
安全这个话题,要感谢斯诺登,过去的安全就是攻和防之间的关系,即我们用一种什么样的体系.架构和模式去构建一个密不可破的安全系统.” 对IETF工作组忽视外部观察者看起来是一件甚么微不足道的事情的能力感到 ...
- Pool数据池
sql相关请点我!!! 1.普通的sql语句查询完成之后,就要断开,下次查的时候又要重新开启,这样的话,效率会很低,所以利用pool 数据池来解决这种问题,pool数据池查询完之后,就不用去重新链接数 ...
- 包、time、datetime、hashlib和hmac、request、re
目录 包 包的特点 time模块 datetime模块 hashlib模块和hmac模块 hmac密钥(加盐) typing模块 request模块 正则模块 以下必须得记住 哪些做了解 包 包,这里 ...
- 【leetcode】K-th Symbol in Grammar
题目如下: 解题思路:直接把每行的数据计算出来肯定是不行的,因为N最大是30,那个第N行长度就是2^30次方,这显然不可取.那么就只能找规律了,我采取的是倒推法.例如假如我们要求出第四行第七个元素的值 ...
- Task4.用PyTorch实现多层网络
1.引入模块,读取数据 2.构建计算图(构建网络模型) 3.损失函数与优化器 4.开始训练模型 5.对训练的模型预测结果进行评估 import torch.nn.functional as F im ...
- Floyd求解最短路
Floyd算法适用于求解全源最短路.也就是能够求解任意两点间的最短路径并且是适用于含有负权边的图,但是含有负环则不行了!空间复杂度为O(n2).时间复杂度为O(n3).其具体的原理在百度能够找到很多, ...
- Activiti创建表(三)
创建Mysql 创建 mysql 数据库 activiti(名字任意):CREATE DATABASE activiti DEFAULT CHARACTER SET utf8; pom.xml < ...