作者: admin

  • Ruff: 软件定义硬件

    硬件 js 硬件 node.js 草莓派
    Ruff

    javascript以往也就只能写写效果停留在页面领域。之后又出现了node.js把js推向了热门的语言,这样js也实现后端的功能。

    是不是还差js来开发硬件了呢?现在出现了Ruff。

    Ruff 是一个 JavaScript 运行时,专为硬件开发而设计。Ruff 对硬件进行了抽象,使用了基于事件驱动、异步 I/O 的模型,使硬件开发变得轻量而且高效。

    buff20160701105051

     

    https://ruff.io/zh-cn/

  • nodejs笔记

    node.js笔记 node笔记 npm 笔记

     

    安装node.js

     node -v //出现版本号,就表示安装成功
     执行js文件
     node 1.js //执行1.js

     

     

    添加系统变量(一般win安装nodejd时候就已经配置好了)

    win_config

    在当前的win用户添加了

    ;C:\Program Files\nodejs\

    作用就是可以在调用cmd窗口中写node.js命令,如:

    win_config2

     

     

     

    安装完成node之后,就可以使用node的内置模块,其中常用的有:

    buffer
     fs
     http
     path
     querystring
     url
     调用:
     var http=require('http')
     (注意:没路径和.js)

     

     

    node.js中的全局函数
    可以使用console.log(global);查看有哪些全局函数

    setTimeout
    clearTimeout

    setInterval
    clearInterval

    require
    require.main //检查此模块是否为主模块。 node 1.js,1.js被称为主模块
    require.resolve //获取此模块本地路径。D:\\1.js
    require.cache //查看缓存了哪些模块

    __filename // d:\test\2.js
    __dirname // d:\test
    node.js事件(跟DOM可以监听click事件类似)

    request //当用户在输入url回车时候就触发

     例如:
    var http=requrie('http');
    var server=http.createServer();
    server.on('request',fn)  //当服务器接受到数据时就触发事件

     

    node_modules目录管理模块

    利用node_modules目录,可以在此目录里面创建的文件夹就可以以文件夹名称当作模块来加载。

    自行下载:node项目

    只需要运行node app.js,就能够加载foo下的index.js文件。npm管理工具其实也就是用这种方式来打包模块的。
    模块属性
    例如:

    //在app.js最后面添加

    console.log(module.id)
    console.log(module.filename) // C:\app.js
    console.log(module.loaded) //true时,表示加载完成
    module.parent
    module.children
    node安装完成后就默认已经也安装了npm包管理工具,通过npm可以下载我们需要的模块,可以理解为下载jquery插件一样。

     

     

     

     

    文件操作
    node自带fs模块
    var fs=require(‘fs’); //加载
    创建、追加内容
    fs.writeFile(‘./a.txt’,’哈哈’,fn) //创建文件和内容
    fs.writeFile(‘./a.txt’,’追加内容’,{flag:’a’},fn) //追加内容,不加{flag:’a’}则是覆盖内容
    fs.appendFile(‘./a.txt’,’要追加的内容’,’utf8′,fn) //追加内容

     

    查看内容
    fs.readFile(‘./1.txt’,’utf8′,function(){}) //异步,可以使用回调形式。一般情况都使用这个
    fs.readFileSync(‘./1.txt’,’utf8′) //同步,不能使用回调形式。很少用

     

    目录创建、读取

    fs.mkdir(‘./mk’,fn) //创建一个mk目录
    fs.readdir(‘./’,function(err,dir){}) //读取目录

     

    查看文件属性
    fs.stat(‘./a.txt’,function(err,stats){})
    fs.lstat(‘./a.txt’,function(err,stats){}) //查看

     

    检查文件、目录是否存在
    fs.exists()

     

    获取绝对路径
    fs.realpath

     

    移动文件
    fs.rename

     

    //支持事件
    fs.createReadStream('./1.txt',{encoding:'utf8'})
     .on('open',function(){
        console.log('读取文件');
     })
     .on('data',function(data){
        console.log(data)
     })
     .on('end',function(){
        console.log('内容都读取完了');
     })
     .on('close',function(){
        console.log('文件被关闭');
     })
     .on('error',function(){
        console.log('读取文件失败');
     });

     

    (fs模块功能过多,具体自行查资料)

     

    ————————————
    path模块 (路径操作)
    ———————————-
    http模块 (提供http和https服务器)

    var http=require('http');
     http.createServer(function(req,res){
       req //获取客户端发来的信息
       res //获取服务器端发来的信息
     }).listen('1337','127.0.0.1');

    ————————————–
    url 参数操作
    node提供url模块和querystring模块

    //querystring模块
    querystring.parse('user=123&name=陈','&');
    { user: '123', name: '陈' }
    //url模块
    url.parse('http://127.0.0.1:1338/1.php?user=hello&name=chenchen#hash')
    {
     protocol: 'http:',
     slashes: true,
     auth: null,
     host: '127.0.0.1:1338',
     port: '1338',
     hostname: '127.0.0.1',
     hash: '#hash',
     search: '?user=hello&name=chenchen',
     query: 'user=hello&name=chenchen',
     pathname: '/1.php',
     path: '/1.php?user=hello&name=chenchen',
     href: 'http://127.0.0.1:1338/1.php?user=hello&name=chenchen#hash' 
    }

     

     

     

    npm使用


    npm install //安装package.json中的所有包
    npm install gulp //局部安装
    npm install -g gulp //全局安装
    npm install express@3.0 //安装指定版本
    (全局安装和局部安装的区别就是,安装在全局的模块包好处也就是内置的命令可以在任意目录下使用,如果要调用模块,例如
    var express =require(‘express’),必须安装在局部目录中。对于那些要命令操作的模块包推荐安装在全局中)

     


    npm uninstall gulp //卸载局部模块
    npm uninstall -g gulp //卸载全局模块
    npm cache clean //清楚缓存包
    npm uninstall express@4.10.2 //卸载指定版本:

     


    npm config set prefix “d:\node” //修改全局安装路径,以后全局安装路径就是d:\node\node_modules 推荐
    看:https://sdeno.com/?p=4740
    npm update gulp //升级局部路径的包
    npm update -g gulp //升级局部路径的包
    npm update //升级局部路径的所有包
    npm update -g //升级全局路径所有包

     


    npm root -g //查看全局模块安装包的路径,如d:\npmConfig\npm\node_modules
    npm config get prefix //查看npm当前安装路径,如d:\npmConfig\npm
    npm list //查看局部路径安装了哪些模块,如果没有package.json就会报错
    npm list -g //查看全局安装了哪些模块的详细信息
    npm list –global //同上
    npm list -g –depth=0 //只显示全局模块已安装的包和版本号,避免冗长
    npm search express //搜索包是否存在
    npm config ls -l //查看当前npm的设置
    npm config get cache //查看npm缓存目录

     

     

    创建package.json  管理依赖模块

    npm init
    
    npm init --yes  //快速创建

    安装提示一直回车:

    pack123

    yes以后,在当前目录下就能看见package.json

    以后安装模块时使用–save-dev后缀,卸载时也一样devDependencies字段会更新这样能保持实施更新package.json文件,如

    //安装
    npm install mysql --save-dev
    //卸载
    npm uninstall mysql --save-dev
    //批量安装,记录在package.json中的模块将会自动批量安装
    npm install

    如果使用–save后缀是dependencies字段更新。

    -S:--save的简写,安装的模块一般是正式环境需要的,会记录在dependencies字段中
    -D:--save-dev的简写,一般是用于测试时所需要的模块,正式上线是不需要的记录在devDependencies字段中

    devDependencies:主要安装此字段的模块是用户用于项目依赖的模块,对正式上线的项目来说是多余的仅仅是用来测试而已。

    dependencies:该字段里面的模块是正式上线的项目正则所依赖的,缺少一个都不行。

     

    "scripts": {
      "preinstall": "echo here it comes!",
      "postinstall": "echo there it goes!",
      "start": "node index.js",
      "test": "tap test/*.js"
    }
    
    将过长的命令简约化,我们就可以执行npm run preinstall相当于执行了echo here it comes!命令

     

    在node_modules目录中创建属于自己的模块

    //在node_modules目录里面创建名为ceshi的目录,并在ceshi目录里面创建index.js,内容为:
    
    function xx() {
      console.log('测试');
    }
    
    exports.xx=xx;
    
    (在node_modules的模块中入口名称默认是index.js如果想自定义就在模块根目录下创建一个package.json,并在修改"main":"xxx.js"即可)

     

    调用:

    在项目根目录中创建一个1.js的文件

    var get_xx=require('ceshi');
    
    get_xx.xx();

    运行node 1.js就可以调用node_modules里面的ceshi模块了

     

     

     

     

     

  • ES6 JavaScript Promise的插件封装–promise.js

    js 回调 异步 加载 回到

    Promise只是一种代码形式,让我们的代码更简洁、易读懂,更好维护而已。

    不像传统的JS代码一个层层的嵌套,看着乱。

    //传统回调
    
    $('div1').animate({},function(){
      $('div2').animate({},function(){
         $('div3').animate({},function(){
             $('div4').animate({},function(){});
         })
      });
    });
    
    

    传统代码是不是看着心烦。

     

    使用Promise形式虽然也是嵌套,但是看着舒服也易读懂

    Promise($('div1'))
      .then(function() { $('div2') }) 
      .then(function() { $('div3') }) 
      .then(function() { $('div4') });

     

    在此之前也介绍过几个不错的Promise插件,如:

    JavaScript异步编程插件–jsDeferred.js
    jquery Deferred对象 延迟对象
    js异步模块以及回调–async.js
    在ES6中新加了Promise的机制,但是对于低版本的浏览器不兼容,所以有了promise.js,它可以兼容IE7以上浏览器。

    (你可以使用ES6新语法写,但是这样就不会兼容IE7那些低版本浏览器了)

     

    Promise.all([])  //总是在最后才被执行
    
    var promise1 = Promise.resolve(3);
    
    Promise.all([function(){i++;document.title=i+'---';},promise1]).then(function(values){
     (values[0])();   //2  虽然在声明变量i的前面,但是总在最后执行所以能获取到i变量
     console.log(values[1]);  // 获取到的是promise1的值
    });
    
    
    var i=0; 
    ++i;
    
    ...
    ...
    不管这里代码多少Promise.all永远在最后才执行
    
    //Promise.all即使放在声明变量的前面,但是执行的顺序是等待其他JS执行完成后才能执行
    
    
    Promise.race //最快的先执行
    
    var p1 = new Promise(function(resolve, reject) {
     setTimeout(resolve, 500, function(){document.getElementById('box1').style.background='yellow'});
    });
    var p2 = new Promise(function(resolve, reject) {
     setTimeout(resolve, 100, function(){document.getElementById('box2').style.background='#000'});
    });
    
     Promise.race([p1, p2]).then(function(value) {
       (value)();
       //最快的先执行
     });

     

    使用方法:

    .then(function(){},function(){}) //第一个成功回调处理,第二个是失败会懂啊处理
    
    Promise.resolve(value) //返回一个value值,此值是激活成功状态下执行的。
    Promise.reject(reason) //激活失败
    
    Promise.all([]).then // 收集数组里的值,并执行回调
    Promise.race([]).then //获取最先返回的值,就立马回调

    如果想使用done()方法,那还需要加载promise-done-7.0.4.min.js

    具体参考官网:https://www.promisejs.org/

    promise-7.0.4.min