Grunt入门教程之学习笔记

 更新时间:2016年9月20日 18:58  点击:1585
本文章来给各位同学介绍一下关于Grunt入门教程之学习笔记 ,希望此教程对各位同学会有所帮助哦。

我现在在几个小项目中一直在使用Node.js。在Node系统中有一些很强大的工具。我最喜欢的一个例子就是Grunt。

Grunt是一种工具,允许您定义任务,然后通过命令运行他们,在命令行中运行:

 代码如下 复制代码
grunt watch

这将启动一个watch任务,用来监控文件,我已经指定和运行指定的任务,只要这些文件变化了,就能监控到。在我的例子中,我已经在Grunt设置了只要当.js文件改变了就能检测JavaScript语法和压缩JavaScript和当.scss文件改变就能将Sass文件编译成CSS的任务。

这里介绍了如何设置。

安装Grunt
首先你需要先安装Grunt CLI,这是Grunt命令的接口。这将可以在命令行中使用Grunt命令:

 代码如下 复制代码
$ npm install -g grunt-cli

注意:由于我们使用Grunt CLI,Grunt必须安装在每个项目的基础上。这允许您在不同的项目是运行不同版本的Grunt。如果您之前全局安装了Grunt,那么你应该先卸载它:

 代码如下 复制代码
$ npm uninstall -g grunt

安装需要的依赖关系
接下来,您需要设置运行Grunt需要的所有依赖项。在这个例子中你需要grunt,grunt-contrib-jshint(检测js文件),grunt-contrib-uglify(压缩js文件),grunt-contrib-sass(编译你的Sass)。安装这些依赖项目,你需要在你的项目中的根目录下设置一个package.json文件:

 代码如下 复制代码
{
    "name":"Grunt-Example",
    "description": "Example project to demonstrate Grunt.",
    "version":"0.1.0",
    "private": true,
    "author": {
        "name": "Blake Haswell",
        "email": "blake.haswell@simpleweb.com.au"
    },
    "devDependencies": {
        "grunt": "~0.4.0",
        "grunt-contrib-sass": "*",
        "grunt-contrib-jshint": "*",
        "grunt-contrib-uglify": "*",
        "grunt-contrib-watch": "*"
    }
}


一旦你创建好了这个文件,你可以在你的项目目录下运行npm install命令安装所需要的依赖项:

 代码如下 复制代码
$ npm install

设置Gruntfile.js
现在你需要创建一个"Gruntfile"。在这你可以定义你的任务。

首先在你的项目根目录下创建一个Gruntfile.js文件。创建Gruntfile真的很简单,我们只需要定义一个CommonJS模块。当需要改变我们的Grunt配置时,我们只需要修改这个模块。

 代码如下 复制代码
module.exports = function(grunt){
    //Grunt配置写在这里
}

接下来,设置你的第一个任务:JSHint。在Grunt中设置任务,需要运行grunt.initConfig()方法,并通过每个对象设置你的任务。例如,这里介绍了如何设置JSHint:

 代码如下 复制代码

module.exports = function(grunt){

    grunt.initConfig({

        //JSHint (http://www.jshint.com/docs)
        jshint: {
            all: {
                src: 'javascripts/**/*.js',
                options: {
                    bitwise: true,
                    camelcase: true,
                    curly: true,
                    eqeqeq: true,
                    forin: true,
                    immed: true,
                    indent: 4,
                    latedef: true,
                    newcap: true,
                    noarg: true,
                    noempty: true,
                    nonew: true,
                    quotmark: 'single',
                    regexp: true,
                    undef: true,
                    unused: true,
                    trailing: true,
                    maxlen: 120
                }
            }
        }

 

    });

    grunt.loadNpmTasks('grunt-contrib-jshint');
};


正如你看到的,你一个对象中包含了JSHint任务。JSHint是一个多任务,所以这意味着你可以定义多个JSHint任务。在这种情况下JSHint只有一个任务:all。JSHint的all任务指定文件被linted,以及这个选项也适用于lint。

还有,你有没有注意到在底部通过grunt.loadNpmTasks('grunt-contrib-jshint')调用任务。该方法可以从node_modules/中加载grunt-contrib-jshint任务,让它可以使用你的配置。

现在你可以很容易的lint你的JavaScript文件:

$ grunt jshint
很酷,不是吗?你甚至可以创建watch任务,监测JavaScript文件和自动lints文件——当文件失败后会提配你。

 代码如下 复制代码

module.exports = function(grunt){

    grunt.initConfig({

        //JSHint (http://www.jshint.com/docs)
        jshint: {
            all: {
                src: 'javascripts/**/*.js',
                options: {
                    bitwise: true,
                    camelcase: true,
                    curly: true,
                    eqeqeq: true,
                    forin: true,
                    immed: true,
                    indent: 4,
                    latedef: true,
                    newcap: true,
                    noarg: true,
                    noempty: true,
                    nonew: true,
                    quotmark: 'single',
                    regexp: true,
                    undef: true,
                    unused: true,
                    trailing: true,
                    maxlen: 120
                }
            }
        },

        //watch
        watch: {
            jshint: {
                files: 'javascripts/**/*.js',
                tasks: 'jshint'
            }
        }

    });

    grunt.loadNpmTasks('grunt-contrib-jshint');
    grunt.loadNpmTasks('grunt-contrib-watch');
};


现在你执行grunt watch和开始修改你的JavaScript。你保存了你的文件并且lint失败后,将会通知你。在一个跨团队的开发执行编码的标准是一个伟大的方式,它节省时间捕捉觉错误。

Grunt不只是可以用于lint你的代码,你可快速设置任务压缩你的JavaScript:

 代码如下 复制代码

module.exports = function(grunt){

    grunt.initConfig({

        //JSHint (http://www.jshint.com/docs)
        jshint: {
            all: {
                src: 'javascripts/**/*.js',
                options: {
                    bitwise: true,
                    camelcase: true,
                    curly: true,
                    eqeqeq: true,
                    forin: true,
                    immed: true,
                    indent: 4,
                    latedef: true,
                    newcap: true,
                    noarg: true,
                    noempty: true,
                    nonew: true,
                    quotmark: 'single',
                    regexp: true,
                    undef: true,
                    unused: true,
                    trailing: true,
                    maxlen: 120
                }
            }
        },

        //Uglify
        uglify: {
            all: {
                files: {
                    'public/javascripts/all.min.js':'javascripts/**/*.js'
                }
            }
        },

        //watch
        watch: {
            jshint: {
                files: 'javascripts/**/*.js',
                tasks: 'jshint'
            }
        }

    });

    grunt.loadNpmTasks('grunt-contrib-jshint');
    grunt.loadNpmTasks('grunt-contrib-watch');
    grunt.loadNpmTasks('grunt-contrib-uglify');
};


可以编译你的Sass:

 代码如下 复制代码

module.exports = function(grunt){

    grunt.initConfig({

        //JSHint (http://www.jshint.com/docs)
        jshint: {
            all: {
                src: 'javascripts/**/*.js',
                options: {
                    bitwise: true,
                    camelcase: true,
                    curly: true,
                    eqeqeq: true,
                    forin: true,
                    immed: true,
                    indent: 4,
                    latedef: true,
                    newcap: true,
                    noarg: true,
                    noempty: true,
                    nonew: true,
                    quotmark: 'single',
                    regexp: true,
                    undef: true,
                    unused: true,
                    trailing: true,
                    maxlen: 120
                }
            }
        },

        //Uglify
        uglify: {
            all: {
                files: {
                    'public/javascripts/all.min.js':'javascripts/**/*.js'
                }
            }
        },

        //Sass
        sass: {
            options: {
                style: 'compressed',
                precision: 5
            },
            all: {
                files: {
                    'public/stylesheets/style.css':'sass/style.scss'
                }
            }
        },

        //watch
        watch: {
            jshint: {
                files: 'javascripts/**/*.js',
                tasks: 'jshint'
            }
        }

    });

    grunt.loadNpmTasks('grunt-contrib-jshint');
    grunt.loadNpmTasks('grunt-contrib-watch');
    grunt.loadNpmTasks('grunt-contrib-uglify');
    grunt.loadNpmTasks('grunt-contrib-sass');
};


然后,你可以将任务添加到你的watch任务,将可以自动执行这些任务:

 代码如下 复制代码

module.exports = function(grunt){

    grunt.initConfig({

        //JSHint (http://www.jshint.com/docs)
        jshint: {
            all: {
                src: 'javascripts/**/*.js',
                options: {
                    bitwise: true,
                    camelcase: true,
                    curly: true,
                    eqeqeq: true,
                    forin: true,
                    immed: true,
                    indent: 4,
                    latedef: true,
                    newcap: true,
                    noarg: true,
                    noempty: true,
                    nonew: true,
                    quotmark: 'single',
                    regexp: true,
                    undef: true,
                    unused: true,
                    trailing: true,
                    maxlen: 120
                }
            }
        },

        //Uglify
        uglify: {
            all: {
                files: {
                    'public/javascripts/all.min.js':'javascripts/**/*.js'
                }
            }
        },

        //Sass
        sass: {
            options: {
                style: 'compressed',
                precision: 5
            },
            all: {
                files: {
                    'public/stylesheets/style.css':'sass/style.scss'
                }
            }
        },

        //watch
        watch: {
            javascript: {
                files: 'javascripts/**/*.js',
                tasks: ['jshint','uglify']
            },
            sass: {
                files: 'sass/**/*.scss',
                tasks: 'sass'
            }
        }

    });

    grunt.loadNpmTasks('grunt-contrib-jshint');
    grunt.loadNpmTasks('grunt-contrib-watch');
    grunt.loadNpmTasks('grunt-contrib-uglify');
    grunt.loadNpmTasks('grunt-contrib-sass');
};

现在,每次Sass文件修改保存后将会重新编译成CSS,每次JavaScript文件修保存后将会自动lint和压缩。

这样编码很爽吧,很开心吧!

因为要做一个带有会员系统功能,本人需要设置的是用户注册如果忘记密码就需要重设置密码了,那么要如何设计密码重设功能?怎么做才合理呢,下面我们一起来看看。


用户流程:

1.用户忘记密码,来到密码重设界面
2.用户输入Email地址,点击重设密码按钮
3.用户收到一封密码重设邮件,里面有重设密码的链接,此链接有过期时间
4.用户点击链接,来到密码重设页面,输入新密码,完成
这个流程并没有什么创新,很多网站都是用这套流程

后端实现方式:

1.当用户输入Email地址后,验证这个Email,如果存在于数据库,那么取得用户的user_id
2.将user_id和当前时间戳编码成HASH,需要提前准备好一个KEY,并且这个KEY只存在服务器上。  HASH = md5 ( user_id + timestamp + KEY )
3.生成一个URL,并且附带刚刚生成的HASH和用户id以及timestamp,比如 http://domain.com/reset-password.php?hash=HASH&user_id=123&timestamp=1392121211
4.当用户访问这个URL, 检查HASH是否合法: HASH == MD5 ( user_id + timestamp + KEY)
5.检查 timestamp 是不是过期了
6.如果所有检查通过,那么显示一个新密码表单给用户
这种方式的好处:
1.不需要额外的数据表
2.不用担心参数被用户恶意修改,因为要检查hash是不是等于那几个参数的md5
3.密码重设URL自带时间戳
4.只要KEY设置的足够长足够复杂,那么可以认为HASH是绝对安全的

send-reset-email.php:

 代码如下 复制代码


$KEY = "something really long long long long long and secret";
$email = $_POST['email'];
$user = get_user_by_email($email);
if ($user && $user['id'])
{
    $time = time();
    $hash = md5( $user['id'] . $time . $KEY);
    $url = "http://domain.com/reset-password-form.php?id=".$user['id'].'&timestamp='.$time.'&hash='.$hash;
    send_email($email, 'reset password email from xxx.com', ' Please click the following link to reset password'. $url);
}


reset-password-form.php:

 代码如下 复制代码


$KEY = "something really long long long long long and secret";
$hash = $_GET['hash'];
$user_id = $_GET['id'];
$timestamp = $_GET['timestamp'];

if ($hash == md5( $user_id . $timestamp . $KEY ))
{
    if ( time() - $timestamp > 3600 ) // one hour
    {
        die('link expired');
    }
}
else
{
    die('invalid parameters');
}

//validation passed

if ($_POST['new_password'])
{
    reset_user_password($user_id, $_POST['new_password']);
    die(' password changed successfully ');
}
else
{
    echo '
        <form action="reset-password-form.php?hash=$hash&id=$user_id&timestamp=$timestamp" method="post">
            new password: <input type="password" name="new_password">

            <input type="submit" value="submit">
        </form>
    ';
}

本文章来给各位介绍一篇常用的各字符集编码范围的总结,希望对各位开发者会有所帮助哦。
编码 字符集编码范围
UTF8 [x01-x7f]|[xc0-xdf][x80-xbf]|[xe0-xef][x80-xbf]{2}|[xf0-xff][x80-xbf]{3}
UTF16 [x00-xd7][xe0-xff]|[xd8-xdf][x00-xff]{2}
Big5 [x01-x7f]|[x81-xfe]([x40-x7e]|[xa1-xfe])
GBK [x01-x7f]|[x81-xfe][x40-xfe]
GB2312汉字 [xb0-xf7][xa0-xfe]
GB2312半角标点符号及特殊符号 xa1[xa2-xfe]
GB2312罗马数组及项目序号 xa2([xa1-xaa]|[xb1-xbf]|[xc0-xdf]|[xe0-xe2]|[xe5-xee]|[xf1-xfc])
GB2312全角标点及全角字母 xa3[xa1-xfe]
GB2312日文平假名 xa4[xa1-xf3]
GB2312日文片假名 xa5[xa1-xf6]
GB18030 [x00-x7f]|[x81-xfe][x40-xfe]|[x81-xfe][x30-x39][x81-xfe][x30-x39]
JIS [x20-x7e]|[x21-x5f]|[x21-x7e]{2}
SJIS [x20-x7e]|[xa1-xdf]|([x81-x9f]|[xe0-xef])([x40-x7e]|[x80-xfc])
SJIS全角空格 (?:x81x81)
SJIS全角数字 (?:x82[x4f-x58])
SJIS全角大写英文 (?:x82[x60-x79])
SJIS全角小写英文 (?:x82[x81-x9a])
SJIS全角平假名 (?:x82[x9f-xf1])
SJIS全角平假名扩展 (?:x82[x9f-xf1]|x81[x4ax4bx54x55])
SJIS全角片假名 (?:x83[x40-x96])
SJIS全角片假名扩展 (?:x83[x40-x96]|x81[x45x5bx52x53])
EUC_JP [x20-x7e]|x81[xa1-xdf]|[xa1-xfe][xa1-xfe]|x8f[xa1-xfe]{2}
EUC_JP标点符号及特殊字符 [xa1-xa2][xa0-xfe]
EUC_JP全角数字 xa3[xb0-xb9]
EUC_JP全角大写英文 xa3[xc1-xda]
EUC_JP全角小写英文 xa3[xe1-xfa]
EUC_JP全角平假名 xa4[xa1-xf3]
EUC_JP全角片假名 xa3[xb0-xb9]|xa3[xc1-xda]|xa5[xa1-xf6][xa3][xb0-xfa]|[xa1][xbc-xbe]|[xa1][xdd]
EUC_JP全角汉字 [xb0-xcf][xa0-xd3]|[xd0-xf4][xa0-xfe]|[xB0-xF3][xA1-xFE]|[xF4][xA1-xA6]|[xA4][xA1-xF3]|[xA5][xA1-xF6]|[xA1][xBC-xBE]
EUC_JP全角空格 (?:xa1xa1)
EUC半角片假名 (?:x8e[xa6-xdf])
日文半角空格 x20
本文章来给各位介绍一段网页插入flv视频代码,可控制是否自动播放实例,希望些代码对各位朋友会有所帮助。


今天小涛分享一个比较实用的东西:网页插入flv视频代码,可控制是否自动播放

 代码如下 复制代码
<object width="500" height="400" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="quality" value="high" /><param name="allowFullScreen" value="true" /><param name="FlashVars" value="vcastr_file=/news/UploadFiles_1118/200809/神舟七号点火发射瞬间.flv&amp;LogoText=www.111cn.net&amp;BufferTime=3&amp;IsAutoPlay=1" /><param name="src" value="/Flv/Flvplayer.swf" /><param name="allowfullscreen" value="true" /><param name="flashvars" value="vcastr_file=/news/UploadFiles_1118/200809/神舟七号点火发射瞬间.flv&amp;LogoText=www.111cn.net&amp;IsAutoPlay=1" /><param name="pluginspage" value="http://www.macromedia.com/go/getflashplayer" /><embed width="500" height="400" type="application/x-shockwave-flash" src="/Flv/Flvplayer.swf" quality="high" allowFullScreen="true" FlashVars="vcastr_file=/news/UploadFiles_1118/200809/神舟七号点火发射瞬间.flv&amp;LogoText=www.111cn.net&amp;BufferTime=3&amp;IsAutoPlay=1" allowfullscreen="true" flashvars="vcastr_file=/news/UploadFiles_1118/200809/神舟七号点火发射瞬间.flv&amp;LogoText=www.111cn.net&amp;IsAutoPlay=1" pluginspage="http://www.macromedia.com/go/getflashplayer" /> </object>

配置:IsAutoPlay=1 自动播放,等于0的时候手动播放

在html表单提交中method请求Get和Post区别其实很显示的,get提交会是url形式的并且数据量不能太多,而post数据是在浏览器url看不到的并且可以是大数据量而且get安全性非常低,post安全性较高.

1. get是从服务器上获取数据,post是向服务器传送数据。

2. get是把参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内各个字段一一对应,在URL中可以看到。post是通过HTTP post机制,将表单内各个字段与其内容放置在HTML HEADER内一起传送到ACTION属性所指的URL地址。用户看不到这个过程。如果不指定Method,则默认为GET请求,Form中提交的数据将会附加在url之后,以?分开与url分开。

3. 对于get方式,asp下用Request.QueryString获取变量的值,php下用$_GET获取。对于post方式,asp下用Request.Form获取提交的数据,php下用$_POST获取。

4. get传送的数据量较小,不能大于2KB。post传送的数据量较大,一般被默认为不受限制。

5. get安全性非常低,post安全性较高。

仔细研究下面的代码。你可以运行之来感受一下:
代码

 代码如下 复制代码
〈!–两个Form只有Method属性不同–〉
〈FORM ACTION=“getpost.asp” METHOD=“get”?
〈INPUT TYPE=“text” NAME=“Text” VALUE=“Hello World”〉〈/INPUT〉
〈INPUT TYPE=“submit” VALUE=“Method=get”〉〈/INPUT〉
〈/FORM〉
〈BR〉
〈FORM ACTION=“getpost.asp” METHOD=“post”〉
〈INPUT TYPE=“text” NAME=“Text” VALUE=“Hello World”〉〈/INPUT〉
〈INPUT TYPE=“submit” VALUE=“Method=post”〉〈/INPUT〉
〈/FORM〉
〈BR〉
〈BR〉
〈% If Request.QueryString(“Text”) 〈〉 ““ Then %〉
通过get方法传递来的字符串是: “〈B〉〈%= Request.QueryString(“Text”) %〉〈/B〉“〈BR〉
〈% End If %〉
〈% If Request.Form(“Text”) 〈〉 ““ Then %〉
通过post方法传递来的字符串是: “〈B〉〈%= Request.Form(“Text”) %〉〈/B〉“〈BR〉
〈% End If %〉

说明
把上面的代码保存为getpost.asp,然后运行,首先测试post方法,这时候,浏览器的url并没有什么变化,返回的结果是:
通过post方法传递来的字符串是: "Hello World"
然后测试用get方法提交,请注意,浏览器的url变成了:
http://localhost/general/form/getpost.asp?Text=Hello+World
而返回的结果是:
通过get方法传递来的字符串是: "Hello World"
最后再通过post方法提交,浏览器的url还是:
http://localhost/general/form/getpost.asp?Text=Hello+World
而返回的结果变成:
通过get方法传递来的字符串是: "Hello World"
通过post方法传递来的字符串是: "Hello World"
提示
通过get方法提交数据,可能会带来安全性的问题。比如一个登陆页面。当通过get方法提交数据时,用户名和密码将出现在URL上

[!--infotagslink--]

相关文章

  • 轻松学习C#的基础入门

    轻松学习C#的基础入门,了解C#最基本的知识点,C#是一种简洁的,类型安全的一种完全面向对象的开发语言,是Microsoft专门基于.NET Framework平台开发的而量身定做的高级程序设计语言,需要的朋友可以参考下...2020-06-25
  • photoshop画斜线/直线/虚线的入门级教程

    这篇文章算是超级入门级别的了,我们下面来给各位介绍在photoshop画斜线/直线/虚线的教程了,希望下面这篇文章给你入门来帮助。 PS怎么画斜线 选择铅笔工具,或者画笔...2016-09-14
  • Lua语言新手简单入门教程

    这篇文章主要给大家介绍的是关于Lua语言新手入门的简单教程,文中通过示例代码一步步介绍的非常详细,对各位新手们的入门提供了一个很方便的教程,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧。...2020-06-30
  • php上传图片学习笔记与心得

    我们在php中上传文件就必须使用#_FILE变量了,这个自动全局变量 $_FILES 从 PHP 4.1.0 版本开始被支持。在这之前,从 4.0.0 版本开始,PHP 支持 $HTTP_POST_FILES 数组。这...2016-11-25
  • Smarty模板学习笔记之Smarty简介

    1、简介Smarty是一个使用PHP写出来的模板PHP模板引擎,是目前业界最著名的PHP模板引擎之一。它分离了逻辑代码和外在的内容,提供了一种易于管理和使用的方法,用来将原本与HTML代码混杂在一起PHP代码逻辑分离。简单的讲,目...2014-05-31
  • 20分钟MySQL基础入门

    这篇文章主要为大家分享了20分钟MySQL基础入门教程,快速掌握MySQL基础知识,真正了解MySQL,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2016-12-02
  • C#线程入门教程之单线程介绍

    这篇文章主要介绍了C#线程入门教程之单线程介绍,本文讲解了什么是进程、什么是线程、什么是多线程等内容,并给出了一个单线程代码示例,需要的朋友可以参考下...2020-06-25
  • php Observer观察者模式之学习笔记

    当我们在星际中开地图和几家电脑作战的时候,电脑的几个玩家相当于结盟,一旦我们出兵进攻某一家电脑,其余的电脑会出兵救援。 那么如何让各家电脑知道自己的盟友被攻击了...2016-11-25
  • CocosCreator入门教程之用TS制作第一个游戏

    这篇文章主要介绍了CocosCreator入门教程之用TS制作第一个游戏,对TypeScript感兴趣的同学,一定要看一下...2021-04-16
  • PHP 日期函数 学习笔记介绍

    举一个简单的date例子 我将使用echo命令把内容输出到我们的客户端(浏览器)。我将使用下面的代码做为基础代码。 代码如下 复制代码 <!DOCTY...2016-11-25
  • 详解Servlet入门级设置(超详细 IDEA2020版)

    这篇文章主要介绍了详解Servlet入门级设置(超详细 IDEA2020版),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-11-04
  • php入门教程(类实例教程)

    这里主要讲到关于在php教程类的调用,申请明,使用以前各种类的实例方法与操作过程,让你清楚的知道php类的construct destruct clone call wake sleep用法。 简单购物车...2016-11-25
  • MySQL的InnoDB引擎入门学习教程

    MySQL发展到今天,InnoDB引擎已经作为绝对的主力,除了像大数据量分析等比较特殊领域需求外,它适用于众多场景。然而,仍有不少开发者还在“执迷不悟”的使用MyISAM引擎,觉得对InnoDB无法把握好,还是MyISAM简单省事,还能支持快...2015-11-24
  • Android学习笔记之多界面切换实例

    一篇Android学习笔记之多界面切换实例,希望对各位朋友有所帮助。 用过VB 、 VC#的朋友都知道,在VB或VC#里要进行窗口(界面)切换很容易 例如在VB、C#里: 有 Fom1、...2016-09-20
  • php中的变量引用传值学习笔记

    引用:意思是将原始对象在内存中的地址传递给目标对象,就相当于原始对象和目标对象指向的是同一个内存地址。此时,如果对目标对象或者原始对象进行修改,内存中的数据也会改...2016-11-25
  • 阿里云ECS服务器入门使用流程(新手必看教程)

    这篇文章主要介绍了阿里云ECS服务器入门使用流程(新手必看教程),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-07-13
  • php入门级教程:PHP大小写问题

    PHP大小写问题算是一个入门级的教程了,在此小编为php初学者介绍php开发中大小写的一些例子,希望可以帮助到各位。 今天写代码的时候发现自己代码的一处错误: $m_cate...2016-11-25
  • php入门教程,?号表达式

    下面举一个很简单的?表达式的实现吧,其实它就是简单的if else哦。 <? $a = 5; //定义变数a=5 $b = 3; //定义变数b=5 $c = ($a==$b) ? ("yes") : ("no"); //如果...2016-11-25
  • 一篇文章带你了解C语言:入门基础(2)

    这篇文章主要介绍了C语言入门之基础知识详解,文中有非常详细的C语言使用教程及相关基础知识,对正在学习c语言的小伙伴们有非常好的帮助,需要的朋友可以参考下...2021-08-04
  • 一看就懂的ReactJs基础入门教程-精华版

    现在最热门的前端框架有AngularJS、React、Bootstrap等。自从接触了ReactJS,ReactJs的虚拟DOM(Virtual DOM)和组件化的开发深深的吸引了我,下面来跟我一起领略ReactJs的风采吧~~ 文章有点长,耐心读完,你会有很大收获哦...2021-04-05