webpack学习笔记

1、安装

1、npm install -g webpack全局安装
2、npm install --save-dev webpack项目根目录

2、编译命令

webpack .\src\main.js

3、配置文件webpack.config.js

webpack是基于nodejs进行构建的,支持node代码

const path = require('path');

module.exports = {
  entry: './src/index.js',
  output: {
    filename: 'bundle.js',
    path: path.resolve(__dirname, 'dist')
  }
};

4、webpack-dev-server工具,实现自动打包编译功能

工具会读取项目根目录下的webpack.config.js配置文件进行打包构建
安装:npm i webpack-dev-server -D
1、必须要本地项目中安装webpack,全局的不可以。
2、使用在scripts下,加dev:'webpack-dev-server'。然后npm run dev可以开始自动打包编译监听代码的改动。

image.png

image.png

webpack-dev-server帮我们打包生成的bundle.js并没有存放到实际的物理磁盘上(非dist/bundle.js),而是直接托管到了电脑内存中,项目目录中是找不到这个bundle.js的。所以引用路径要修改为/bundle.js

webpack-dev-server常用命令

dev:'webpack-dev-server --open --port 3000 --contentBase src --hot'

5、html-webpack-plugin在内存中生成html

webpack.config.js

//只要是plugin,放到plugins节点中去
const htmlWebpackPlugin =  require('html-webpack-plugin')
module.exports = {
  entry: './src/main.js',
  output: {
    filename: 'bundle.js',
    path: path.resolve(__dirname, 'dist')
  },
plugins:[
  new htmlWebpackPlugin ({
template:path.join(__dirname,'./src/index.html'), //指定模板页面,生成内存中的页面
filename:'index.html'
})
]
};

此时在html中不再需要手动引入 bundle.js了,自动创建了script标签引用了正确的bundle路径

6、loader处理css表

webpack默认只能打包js类型的文件,无法处理其他非js类型的文件,如果要打包其他类型文件,需手动安装第三方加载器。
main.js

import './css/index.css'
import './css/index.less'
import './css/index.scss'
//1、npm i style-loader css-loader -d
//2、在webpack.config.js中,配置一个节点module,是一个对象,包含rules属性是个数组,rules中存放了所有第三方文件的匹配和处理规则

webpack.config.js

module.exports = {
  ...
module:{
  rules:[
{test:/\.css$/,use:['style-loader','css-loader']},
{test:/\.less$/,use:['style-loader','css-loader','less-loader']},//less文件的补充
{test:/\.scss$/,use:['style-loader','css-loader','sass-loader']},/scss文件的补充
//匹配到以.css结尾的文件,调用loader时,从右向左处理,即先css-loader,再style-loader,
//处理结束后交给webpack进行打包合并,最终输出到bundle.js中去
  ]
}
};

7、url-loader

webpack无法处理css中的url地址
安装:npm i url-loader file-loader -d (file-loader是url-loader的内部依赖)

{test:/\.(jpg|png|gif|jpeg|bmp)$/,use:'url-loader?limit=7221&name=[hash:8]-[name].[ext]'}

不加limit时发现图片url会变成base64。limit给定的值是图片的大小,单位是byte,如果图片大于或等于给定的limit值,不会转为base64字符串,如果小于给定的limit则会转为base64

{test:/\.(ttf|eot|svg|woff|woff2)$/,use:'url-loader'}

8、babel

webpack默认只能处理一部分es6新语法,一些高级的es6等语法处理不了,需要借助第三方loader把高级语法转为低级语法之后,把结果交给webpack去打包到bundle.js中,通过babel
1、安装
第一套包 npm i babel-core babel-loader babel-plugin-transform-runtime -d
第二套包 npm i babel-preset-env babel-preset-stage-0 -d
2、配置
webpack.config.js配置文件中,在module节点下的rules中添加一个新的匹配规则
注意:配置babel的loader规则时,必须把node_modules目录,通过exclude选项排除掉

{test:/\.js$/,use:'babel-loader',exclude:/node_modules/}//排除node_modules目录下的js文件

3、在项目根目录下新建一个叫做 .babelrc 的babel配置文件,属于json格式

{
  "presets":["env","stage-0"],
  "plugins":["transform-runtime"]
}

9、在webpack构建的项目中,使用vue

复习:在普通网页中使用vue
1、使用script 标签引入vue的包
2、在index页面中,创建一个id为 app的 div容器
3、通过 new Vue得到一个vm的实例

在webpack构建的项目中,使用vue
1、安装vue包:npm i vue -s
2、使用vue模板页面,需要安装相关loader:npm i vue-loader vue-template-compiler -d,在配置文件中添加

{test:/\.vue$/,use:'vue-loader'}

3、main.js

import Vue from 'vue'
import login from './login.vue'//使用模板
//在webpack 中使用import Vue from 'vue'导入的vue构造函数,功能不完整,
//只提供了runtime-only的方式,并没有提供像网页中那样的使用方式,这时候如果用new Vue 方式会报错
//如何修改,可以具体看下面的补充内容
var vm=new Vue({
  el:'#app',
  data:{
    msg:'123'
  },
  render :function(createElements){//可以简化为render: c => c(login)
    return createElements(login)
  }
})

补充:包的查找规则
1.找 下面根目录中有没有 node_modules文件夹
2.在 node_modules文件夹中,根据包名,这里用到的是vue,找到对应的 vue 文件夹
3.在vue文件夹中,找一个叫做 package.json 的包配置文件
4.在 package.json 文件中,查找一个 main 属性【main属性指定了这个包被加载时的入口文件】
修改vue被导入时包的路径,除了修改这个main属性外,还可以,在webpack.config.js里加一个节点

resolve:{
  alias:{
      "vue$":"vue/dist/vue.js"
  }
}

10、结合webpack使用vue-router

1、导入vue-router
2、手动安装vue-router
3、创建路由对象
4、创建组件
5、将路由对象 挂载到vm上

import Vue form 'vue'
import VueRouter form 'vue-router'
Vue.use(VueRouter)
//导入app组件
import app from './app.vue'
//创建 apple 组件
import apple from './main/apple.vue'
var router = new VueRouter({
  routes:[
    {
      path:'/apple',
      component:apple,
      //添加子路由children:[{ path:'red',component:red},{ path:'green',component:green}]
    }
  ]
})
var vm=new Vue({
  el:'#app',
  render: c => c(app),
  router
})

app.vue

<router-link to="/apple">apple</router-link>
<router-view></router-view>

将main.js进行改造,将路由模块单独提取router.js

//创建 apple 组件
import VueRouter form 'vue-router'
import apple from './main/apple.vue'
var router = new VueRouter({
  routes:[
    {
      path:'/apple',
      component:apple,
      //添加子路由children:[{ path:'red',component:red},{ path:'green',component:green}]
    }
  ]
})
export default router

一些随机补充

导入时经常看到的@:这是webpack设置的路径别名。 在build/webpack.base.conf这个文件里面定义。默认定义:@这东西代表着到src这个文件夹的路径
image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 193,968评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,682评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,254评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,074评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,964评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,055评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,484评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,170评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,433评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,512评论 2 308
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,296评论 1 325
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,184评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,545评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,880评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,150评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,437评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,630评论 2 335