• 《nodejs+gulp+webpack基础实战篇》课程笔记(五)-- 实战演练,构建用户登录


    一、用gulp +webpack构建登录页面(1):简单构建

      我们做项目经常要做的“百搭”页面 登录页面 ,它的基本要素如下: 1、页面展示要素 2、基本脚本判断 3、后端交互。

      在项目根目录下创建 src(有逼格的名称) --tpl (代表是模板) --login.html(后缀随意) 注意,一旦发布到生产环境, 以上文件是不需要上传到服务器上的。 <!--src/tpl/login.html-->

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>登录测试页面</title>
    </head>
    <body>
    <h2>用户登录</h2>
        <div>
            用户名
        </div>
        <div>
            <input type="text" id="txtUerLogin"/>
        </div>
        <div>
            密码
        </div>
        <div>
            <input type="password" id="txtUserPwd"/>
        </div>
        <div>
            <button id="cmdLogin">登录</button>
        </div>
    <script src="../js/build.js"></script>
    <!--因为login.html 最终是要引用JS文件的。 我们先写死在login.html里(这说明 :肯定有不写死的方法 )-->
    </body> </html> 
    var cmdLogin = document.getElementById("cmdLogin");
    cmdLogin.onclick = function(){
        alert("登录测试")
    }
    //src/main.js创建一个主文件
    
    

      这里,我们只是演示如何用webpack编译,所以代码简单且LOW,好下面,开始测试用webpack编译。

    //先到webpack.config.js中确认我们的入口文件
    module.exports=
    {
        entry:[                     //entry是入口文件,可以多个,代表要编译哪些JS
            './src/mian.js'
        ],
        output:{
            path: __dirname+'/build/js',      //输出文件夹
            filename: 'build.js'    //最终打包生成的文件名
        }
    
    }

      在项目根目录下执行命令:webpack 一切编译好了

      下面开始结合gulp,这节课我们做简单点 1、利用我们之前学习的gulp-webpack把JS编译。2、利用 gulp把 tpl下面的文件生成到build/html里面去。

    //在gulpfile重新写入两个task任务
    //生成JS文件
       gp.task("build-js",function(){
           gulp_webpack(webpack_config,webpack)
               .pipe(gp.dest('./build/js'))
       })
    //最终生成
    gp.task("run",['build-js'],function(){
        gp.src(['./src/tpl/*.html'])
            .pipe(gp.dest('./build/html'))
    })

       运行:

      

      OK ,我们在build文件夹中,分别在html和JS文件下生成了login.html和build.js文件,在浏览器中运行login.html文件,我们就能看到生成后的效果.


     二、用gulp+webpack构建用户登录(2):简化

       老规矩,这节需要使用到webpack一个插件,我们先安装

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

      先用一个简单的方式演示下这个插件的使用:

    var HtmlWebpackPlugin = require('html-webpack-plugin');//万事先引用
    module.exports=
    {
        entry:[                     //entry是入口文件,可以多个,代表要编译哪些JS
            './src/mian.js'
        ],
        output:{
            path: __dirname+'/build/js',      //输出文件夹
            filename: 'build.js'    //最终打包生成的文件名
        },
        plugins:[
            new HtmlWebpackPlugin({
                filename: __dirname + '/build/html/login_build.html',
                template: __dirname + '/src/tpl/login.html',
                inject:"body",  //在head中引用就写head
                hash:true      
            }) //初始化这个对象
        ]
    }

      OK,在node中运行webpack,我们得到和上一节课一样的结果。

      回到gulp中,

    //生成JS文件
    gp.task("build-js",function(){
        gulp_webpack(webpack_config)
            .pipe(gp.dest('./build/js'))
    })
    
    //最终生成
    gp.task("run",function(){
        webpack(webpack_config,function(err,status){
            //这里需要些gulp处理过程
        })
    
        /*
         gp.src(['./src/tpl/!*.html'])
         .pipe(gp.dest('./build/html'))*/
    })

      node中继续运用gulp run,结果还是一样


    三、用gulp +webpack构建登录页面(3):在页面中使用jquery

      还是先做个准备工作,下载指定版本的jquery。

    npm install jquery@1.11.0 --save-dev

      如果把所有代码都写在main.js里明显不合适。于是我们要开始分文件。 1、先把main.js留空,后面我们再用 2、创建一个 login.js专门做登录相关 3 、创建一个reg.js专门做注册相关。

      

      修改webpack配置文件,并且引入我们开始下载的jquery,下面标红的的代码就是我们这里写入的新代码。

    var HtmlWebpackPlugin = require('html-webpack-plugin');//万事先引用
    var webpack = require("webpack");
    
    module.exports=
    {
        entry: [    //entry 是入口文件,可以多个,代表要编译那些js
            './src/main.js',
            './src/login.js',
            './src/reg.js',
        ],
        output:{
            path: __dirname+'/build/js',      //输出文件夹
            filename: 'build.js'    //最终打包生成的文件名
        },
        plugins:[
            new HtmlWebpackPlugin({
                filename: __dirname + '/build/html/login_build.html',
                template: __dirname + '/src/tpl/login.html',
                inject:"body"
    
            }), //初始化这个对象
            new webpack.ProvidePlugin({
                $:'jquery'  //这里请确保你的jquery已经安装了。否则要路径引用哦
            })
        ]
    
    }
    //src/login.js
    $("#cmdLogin").click(function(){
        alert('登录')
    })
    //src/reg.js
    $("#cmdReg").click(function(){
        alert('注册');
    })

      node中运行webpack,我们到build文件夹起看看生成的结果...


    四、用gulp +webpack构建登录页面(4):把我们的业务模块分开打包

      事实上我们并不需要把所有业务都合并到一个JS文件(后面会越来越大), 就要用到webpack的拆分插件.

      第一步:修改entry,设置多节点:

     /*entry: [    //entry 是入口文件,可以多个,代表要编译那些js
            './src/main.js',
            './src/login.js',
            './src/reg.js',
        ],*/
        entry:{ //多节点设置
            "main":'./src/main.js',
            "user":['./src/login.js','./src/reg.js']
        },

      第二步:用到webpack的拆分插件

     new webpack.optimize.CommonsChunkPlugin({
                name:"user",            //entry定义的节点名
                filename:"user.js"       //最终要生成到文件名
            })

      事实上,jquery这样的库,我们生产环境肯定要使用CDN地( 哪怕是本地的压缩文件),而不会和我们的业务模块打包到一起。

      譬如国内的 CDN地址 http://cdn.bootcss.com/jquery/1.12.4/jquery.js,在webpack配置中设置:  

      //在tpl中的login引用:http://cdn.bootcss.com/jquery/1.12.4/jquery.js
      //webpack.config.js中引入下面内容
      externals: { ‘jquery’: ‘jQuery’
    //或者 ‘jquery’:’$’ },

    五、构建登录页面(5):样式处理初步

      下面需要写一些样式,先在Src文件夹下创建一个子文件夹叫css。

      新建main.css 内容如下(超级简单): #cmdLogin{color:red} #cmdReg{color:green}。

      这里还需要用到两个插件,我们先下载下来

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

      Webpack的loader是重要特性之一: 用于转换应用程序的资源文件, 告诉webpack怎样加载一个资源文件。在webpack.config.js中增加下列代码

      在main.js中记得加载  require('./css/main.css');

    //加载css
        module:{
            loaders:[   //设置加载器
                {test:/.css$/,loader:"style!css"} // test属性是一个正则,loader属性知名加载器,!是连接符
    
            ]
        },

      OK,再次NODE运行,我们去看看结果。


    六、用gulp +webpack构建登录页面(6):样式单提取

       如果我们并不需要打包到脚本中去呢?往往一个“互联网”项目会涉及到很多样式文件。 譬如全局有个总样式文件----譬如叫main.css ,单独的模块有单独的样式文件--譬如叫user.css, 按需加载才是我们要想要的,否则带宽压力、客户等待等会造成项目的体验很差。

      还是先下一个插件:

    npm install extract-text-webpack-plugin --save-dev
    //官方示例和说明:https://github.com/webpack/extract-text-webpack-plugin

      OK,现在我们还是在webpack.config.js中引用并设置,红色标志部分是我们引用的地方,下面给出现在webpack.config.js的全部内容

    var HtmlWebpackPlugin = require('html-webpack-plugin');//万事先引用
    var webpack = require("webpack");
    var ExtractTextPlugin = require("extract-text-webpack-plugin"); //初始化
    module.exports=
    {
        /*entry: [    //entry 是入口文件,可以多个,代表要编译那些js
            './src/main.js',
            './src/login.js',
            './src/reg.js',
        ],*/
        entry:{ //多节点设置
            "main":'./src/main.js',
            "user":['./src/login.js','./src/reg.js']
        },
        output:{
            path: __dirname+'/build/js',      //输出文件夹
            filename: 'build.js'    //最终打包生成的文件名
        },
        externals: {
        'jquery': 'jQuery'   //或者 ‘jquery’:’$’
        },
        //加载css
        module:{
            loaders:[   //设置加载器
                //{test:/.css$/},loader:"style!css"}
                {test:/.css$/,loader:ExtractTextPlugin.extract("style","css")} // test属性是一个正则,loader属性知名加载器,!是连接符
    
            ]
        },
    plugins:[
            new HtmlWebpackPlugin({
                filename: __dirname + '/build/html/login_build.html',
                template: __dirname + '/src/tpl/login.html',
                inject:"body"
    
            }), //初始化这个对象
            new webpack.ProvidePlugin({
                $:'jquery'  //这里请确保你的jquery已经安装了。否则要路径引用哦
            }),
            new webpack.optimize.CommonsChunkPlugin({
                name:"user",            //entry定义的节点名
                filename:"user.js"       //最终要生成到文件名
            }),
            new ExtractTextPlugin("[name].css") //根据我们自己的文件名来生成
    
    ]
    
    }

      OK ,我们还是在NODE中生成,然后看看结果。

    版权声明:笔记整理者亡命小卒热爱自由,崇尚分享。但是本笔记源自www.jtthink.com(程序员在囧途)沈逸老师的《前端开发速学成财(nodejs+gulp+webpack基础实战篇)。本学习笔记小卒于博客园首发, 如需转载请尊重老师劳动,保留沈逸老师署名以及课程来源地址 .

    上一节《nodejs+gulp+webpack基础实战篇》课程笔记(四)-- 实战演练

    下一课:《nodejs+gulp+webpack基础实战篇》课程笔记(六)--附加课

  • 相关阅读:
    Django部署在CENTOS7上
    慕课DJANGO配置
    响应式布局组件介绍
    SYN泛洪攻击原理及防御
    Token,session,cookie
    -webkit-
    JS中dataTransfer对象在拖曳操作中的妙用。
    深入理解DOM节点类型第一篇——12种DOM节点类型概述
    js如何打印object对象
    cookie(2)
  • 原文地址:https://www.cnblogs.com/xz1024/p/5862998.html
Copyright © 2020-2023  润新知