Webpack,.webpack-router,webpack-html,webpack-vue,webpack-babel,webpack-图片&字体,webpack-css,webpack-...

1.网页中引入的静态资源多了以后有什么问题???

    a. 对网页性能不友好:要发起很多的静态资源请求,降低页面的加载效率,用户体验差;
    b. 对程序开发不友好:前端程序员要处理复杂的文件之间的依赖关系;
如何解决上述两个问题
    a. 对于 JS 文件 或 CSS 文件,可以合并和压缩;小图片适合转 Base64 格式的编码;
    b. 通过一些工具,让工具自动维护文件之间的依赖关系;

2.webpack?

    Webpack4以上的版本要安装webpack-cli
    1.什么是webpack:webpack是一个现代javascript应用程序的模块打包器,分析你的项目结构,找到javascript模块以及其他的一些浏览器不能直接直接运行的拓展语言,并将其转换和打包为合适的格式工浏览器使用,把浏览器不能识别的文件转换成浏览器能识别的文件,webpack 是前端项目的构建工具;前端的项目,都是基于 webpack 进行 构建和运行的;
    2.什么项目适合使用webpack:
        webpack 非常适合与单页面应用程序结合使用;
        不太适合与多页面的普通网站结合使用;
    3.为什么要使用webpack: 
        如果项目使用 webpack 进行构建,我们可以书写高级的ES代码,且不用考虑兼容性;
        webpack 能够优化项目的性能;
        基于webpack,程序员可以把 自己的开发重心,放到功能上;
        webpack把浏览器不能识别的文件进行打包合并成浏览器不能识别的文件
        1.把多个文件合并成一个文件,使用,打包的是一个入口文件,入口文件已经引入了好多文件
        2.把浏览器不能识别的文件转换成浏览器能识别的文件,

3.webpack-cli

使用命令:webpack 输入文件路径 打包后文件路径将一个文件打包成另外一个文件

4.在项目中安装和配置webpack

    webpack 就是前端的一个工具,这个工具,已经被托管到了NPM官网上;
    a. 新建一个项目的空白目录,并在在终端中,cd到项目的根目录,执行npm init -y 初始化项目
    b. 装包:运行 cnpm i webpack webpack-cli -D 安装项目构建所需要的 webpack
    c. 打开 package.json文件,在 scripts 节点中,新增一个 dev 的节点:

              "scripts": {
                     "test": "echo \"Error: no test specified\" && exit 1",
                     "dev": "webpack"
          },

    d. 在项目根目录中,新建一个 webpack.config.js 配置文件,内容如下:

    // 这是 使用 Node 语法, 向外导出一个 配置对象

   module.exports = {
          mode: 'production' // production    development
     }
    e. 在项目根目录中,新增一个 src 目录,并,在 src 目录中,新建一个 index.js 文件,作为 webpack 构建的入口;
    f. 在终端中,直接运行 npm run dev 启动webpack进行项目构建;

思路:当在命令行输入npm run dev,webpack就被run 起来了,它会先检查有没有webpack.config.js文件,如果有,就去执行这个文件,,文件里面有一个对象,根据这个配置文件进行相应的打包,生成dist文件,还有下面的main.js文件
    //这是使用node语法,向外导出一个配置对象
    module.exports={
    mode:"production"//生产环境,运行环境
    //development开发环境,不会压缩代码
    }
注意:webpack从4.x版本开始,提供了一些默认的约定:
    1.如果程序员在webpack.config.js这个配置文件中,没有提供entry入口文件,则webpack默认去打包src目录下的index.js文件
    2.如果程序员没有在配置文件,提供output输入选项,则webpack默认,会把打包构建好的代码文件,放到dist目录下的main.js文件中

1.需要对src下面的哪个文件进行打包,就在webpack.config.js文件中使用entry指定打包的入口文件,
2.要把打包好的文件放到哪里,就要在webpack.config.js文件中使用output输出的配置对象,并指定输出的文件名称

5.webpack-config

1.先创建一个webpack-config的文件,在里面配置webpack.config.js和index.html平级
2.运行webpack,就会生成一个dist文件,dist文件里面有一个bundle.js文件,这就是打包后的文件
    var path = require('path')
    
    module.exports = {
          // 入口文件配置
          entry: "./src/app.js",
        
          // 出口文件配置项
          output: {
            // 输出的路径,webpack2起就规定必须是绝对路径
            path: path.join(__dirname, 'dist'),
            // 输出文件名字
            filename: "bundle.js"
          }
    }
3.在inden.html文件中引入bundle.js
    
4.在命令行运行webpack就可以了,,打开浏览器,,修改一次值,就要运行一次webpack再打开浏览器

6.webpack-dev-server
webpack-dev-server作用:实时监听代码的改变,实时打包构建,自动帮我们打包并刷新浏览器,但是,它打包好的main.js并不会直接存放到物理磁盘 src->main.js中,而是托管到了内存中,大家可以认为,在项目根目录中,有一个看不见的main.js文件

1. 运行:npm init -y
2. 运行:npm i webpack-dev-server@2.9.7 webpack@3.11.0 -D
      var path = require('path')
    ​
     module.exports = {
           // 入口文件配置
           entry: "./src/app.js",
        ​
           // 输出配置
           output: {
             // 输出的路径
             path: path.join(__dirname, 'dist'),
             // 静态资源在服务器上运行时的访问路径,可以直接http://localhost:8080/dist/bundle.js访问到服务器中的bundle.js文件
             publicPath: '/dist',
             // 输出文件名字
             filename: "bundle.js"
           }
    }
3. index.html中修改 <script src="/dist/bundle.js"></script>
4. 运行:webpack-dev-server
5. 运行:webpack-dev-server --inline(支持hash#值) --hot --open --port 8090

6. 配置script:"dev": "webpack-dev-server --inline --hot --open --port 8090"配置脚本
7. npm run dev跑配置的脚本,以后再修改值,保存后直接刷新浏览器,不用再运行命令

7.webpack-css
Css-loader可以解析js入口文件中的css文件

1.安装npm install css-loader style-loader --save-dev
2.在根目录下创建一个styles文件夹,在这个文件里面创建a.css文件,并在a.css文件写一点样式,在入口文件app.js中引入a.css文件
    require("../styles/a.css")
2.在webpack.config.js文件中加入模块打包器
        
          module: { //模块打包器
            rules: [
           8   // 配置的是用来解析.css文件的loader(style-loader和css-loader)
              {
                // 1.0 用正则匹配当前访问的文件的后缀名是  .css
                test: /\.css$/,
                use: ['style-loader', 'css-loader'] //webpack底层调用这些包的顺序是从右到左
              }
            ]
          }

8.webpack-less&webpack-sass

1.安装npm install less less-loader sass-loader node-sass --save-dev
2.在根目录下的styles文件夹里面创建b.less和c.scss文件,这两个文件都写一些样式,在入口文件app.js中引入b.less和c.scss文件
    require("../styles/b.less")
    require("../styles/c.scss")
3.在webpack.config.js文件的module的rules中加入模块打包器
    {
        test: /\.less$/,
        use: [{
            loader: 'style-loader'
        }, {
            loader: 'css-loader'
        }, {
            loader: 'less-loader'
        }]
    },
    
    {
        test: /\.scss$/,
        use: [{
            loader: 'style-loader'
        }, {
            loader: 'css-loader'
        }, {
            loader: 'sass-loader'
        }]
    }

9.webpack-图片&字体

1.图片
    1.安装npm install file-loader url-loader --save-dev
    2.在跟目录下创建img文件,里面放好图片
    3.在a.css文件中使用图片


        之前引好的文件
        
        
    4.webpack.config.js文件的module的rules中加入模块打包器
        
            {
               test: /\.(png|jpg|gif)/,
               use: [{
                   loader: 'url-loader',//默认以base64处理图片
                   options: {
                     // limit表示如果图片大于50000byte,就以路径形式展示file-loader,//小于的话就用base64格式展示,url-loader
                       limit: 50000
                   }
               }]
            }
2.字体
    1.在icomoon上下载好字体包,解压,将fonts文件夹放在根目录下,将style.css文件放在styles文件下
                
                                
    
    2.在styles文件下的style.css文件中在设置如下
        
        
    3.在字体图片页面中,点击getcode会出现代码,将代码粘贴至index.html文件
        
        
        
        
        
        
        
    4.在src文件下的app.js文件中,引入style.css文件
        
    5.在webpack.config.js文件的module的rules的图片和字体图标部分,在test中加入fonts中文件的后缀名
        
    6.运行npm run dev命令就可以了

10.webpack-html
在html中自动引入打包好的js文件,不用在Html中引入,如果打包的js文件名改变,输出文件output中的filename把打包好的js文件名改变,也会自动生成改变,不用手动改

1. 注意需要注释掉publicPath,不然会冲突
    
2.在webpack.config.js文件中引入插件
    var HtmlWebpackPlugin = require('html-webpack-plugin')
    
3.在webpack.config.js文件的output中写入
    根据template.html生成一个index.html文件,在内存中,所以看不到index.html
    plugins: [
        new HtmlWebpackPlugin({
            filename: 'index.html',
            template: 'template.html'
        })
    ]
    
4.将index.html重命名为template.html
5.在template.html中删除引入的打包好的js文件'
    
    
    
6.在template.html的title中,添加<%= htmlWebpackPlugin.options.title %>
    
7.在webpack.config.js文件中的pligins中设置title,会出现下图效果

11.webpack-babel
处理ES6语法浏览器不能解析的问题

1.在src的calc.js的文件中写ES6语法代码
    
2.在src文件下的app.js中引入calc.js文件
    
3.在webpack.config.js文件中的module中rules中引入,删掉options的代码
    
4.在根目录下 新建.babelrc文件,写入

12.webpack-vue,结合webpack处理单文件组件

1.从第5天拷贝webpack-babel,,文件名改为webpack-vue
    
    
    
2.安装配置webpack相关loader
    1. 已经从第5天的node_modules中全部拷过来,这里面所有包都有,有一个老师发的包,全部包都有,都下载好了,在老师发的资料里面
    2. npm install vue --save
    3. npm install vue-loader vue-template-compiler --save-dev
    
3.创建一个components文件夹,在这个文件夹中创建App.vue文件创建vue组件
    
    <!-- App.vue -->
        <template>
              <div>{{msg}}</div>
            </template>
        <script>
            export default {
              data () {
                return {
                  msg: 'hello world'
                }
              }
            }
        </script>
        <style>
              div {
                color: red;
              }
        </style>
    
4.在根目录下创建app.js文件,用来引入App.vue组件,并将组件渲染到页面
    
        // app.js
        import Vue from 'vue'
        import App from './App.vue'
        
        new Vue({
            el: '#app',
            render: h=> h(App)
        })
    

5.在template.html文件中删除之前的代码,写入以下代码
    
6.在webpack.config.js文件的module的rules中写入以下代码,module用来挂载模块
    
    
    
7.修改webpack.config.js文件中的入口文件
    
8.webpack.config.js完整代码
    
    var path=require("path")
    var HtmlWebpackPlugin = require('html-webpack-plugin')
    module.exports={
    //配置入口文件
    entry:'./app.js',
    //配置输出文件
    output:{
    path:path.join(__dirname,"dist"),
    // 静态资源在服务器上运行时的访问路径,可以直接http://localhost:8080/dist/bundle.js
    //访问到服务器中的bundle.js文件
    // publicPath: '/dist',
    //表示输出文件的名字
    filename:'bundle.js'
    },
    module: {
    rules: [
    // 配置的是用来解析.css文件的loader(style-loader和css-loader)
    {
    // 1.0 用正则匹配当前访问的文件的后缀名是 .css
    test: /\.css$/,
    use: ['style-loader', 'css-loader'] //webpack底层调用这些包的顺序是从右到左
    },
    {
    test: /\.less$/,
    use: [{
    loader: 'style-loader'
    }, {
    loader: 'css-loader'
    }, {
    loader: 'less-loader'
    }]
    },
    {
    test: /\.scss$/,
    use: [{
    loader: 'style-loader'
    }, {
    loader: 'css-loader'
    }, {
    loader: 'sass-loader'
    }]
    },
    {
    test: /\.(png|jpg|gif|eot|svg|ttf|woff)/,
    use: [{
    loader: 'url-loader',//默认以base64处理图片
    options: {
    // limit表示如果图片大于50000byte,就以路径形式展示file-loader,
    //小于的话就用base64格式展示,url-loader
    limit: 50000
    }
    }]
    },
    {
    test: /\.js$/,
    // Webpack2建议尽量避免exclude,更倾向于使用include
    // exclude: /(node_modules)/, // node_modules下面的.js文件会被排除
    include: [path.resolve(__dirname, 'src')],
    use: {
    loader: 'babel-loader',
    // options里面的东西可以放到.babelrc文件中去
    // options: {
    // presets: ['env']
    // }
    }
    },
    {
    test: /\.vue$/,
    loader: 'vue-loader'
    }
    ]
    }, 
    plugins: [
    new HtmlWebpackPlugin({
    filename: 'index.html',
    template: 'template.html',
    title:'html-webpack-plugin'
    })
    ]
    }

13.webpack-router

1.安装路由npm install vue-router --save
2.在components文件中新建Login.vue文件,在文件中写入模板,样式
    
3.在app.js中设置路由
    1.思路步骤
        1.引入vue-router路由
        2.启用路由插件
        3.创建路由对象,配置路由规则
        4.引入路由组件,在components的Login.vue文件中
        5.注入router路由对象,挂载路由
        6.给组件挖坑,在在components的App.vue文件中通过router-view挖坑,路径匹配到的组件都会渲染在这里,会随path路径的变化,显示不同的组件
            
        7.在Login.vue文件中的样式style上设置scoped让样式变为组件内部使用的局部样式
                
    2.代码
        
    
        
        import Vue from "vue"
        import App from "./components/App.vue"
        //4.引入路由组件,在components的Login.vue文件中
        import Login from "./components/Login.vue"
        //1.引入vue-router路由
        import VueRouter from "vue-router"
        //2.启用路由插件
        Vue.use(VueRouter)
        //3.创建路由对象,配置路由规则
        var router=new VueRouter({
        routes:[
        {name:"Login",path:"/login",component:Login}
        ]
        })
        new Vue({
        el:"#app",
        //render将组建渲染到页面中去
        // render:function(h){
        // //h表示要渲染的组件
        // return h(App)
        // }
        //5.注入router路由对象,挂载路由
        router,
        render:h => h(App)
        })
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 157,298评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,701评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 107,078评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,687评论 0 202
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,018评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,410评论 1 211
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,729评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,412评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,124评论 1 239
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,379评论 2 242
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,903评论 1 257
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,268评论 2 251
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,894评论 3 233
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,014评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,770评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,435评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,312评论 2 260

推荐阅读更多精彩内容

  • 1 Webpack 1.1 概念简介 1.1.1 WebPack是什么 1、一个打包工具 2、一个模块加载工具 3...
    Kevin_Junbaozi阅读 6,547评论 0 16
  • 版权声明:本文为博主原创文章,未经博主允许不得转载。 webpack介绍和使用 一、webpack介绍 1、由来 ...
    it筱竹阅读 10,933评论 0 21
  • webpack 介绍 webpack 是什么 为什么引入新的打包工具 webpack 核心思想 webpack 安...
    yxsGert阅读 6,325评论 2 71
  • Webpack学习总结 此文只是自己学习webpack的一些总结,方便自己查阅,阅读不变,非常抱歉!! 下载安装:...
    Lxs_597阅读 909评论 0 0
  • 七律·树 又把诗情铺作画,房前老树落青鸦。 虬枝尽染邀春色,嫩叶还惊遇草纱。 静守年轮镌日月,深埋泥土语桑麻。 浮...
    婉兮清漾阅读 945评论 8 23