作者: admin

  • koa2脚手架koa-generator文件以及目录分析

    官方提供的koa2脚手架项目包。

    npm install koa-generator -g
    koa2 -e koa2

    koa_tr

    启动命令是:

    nodemon ./bin/run
    nodemon命令是安装了runkoa模块而来的,如果不借助runkoa模块启动koa2,会报错因为koa2中使用了async/await,低版本node.js环境不支持

     

    bin目录

    run //脚本文件,用于启动koa2,目的是为了兼容能识别es7语法
    www // http模块和设置端口号的;监听http运行运行。

     

    public目录

    存放静态资源的地方
    例如在images目录中存放了一张1.jpg的图片
    直接访问http://localhost/images/1.jpg就能访问的到

     

    routes目录

    判断业务逻辑的地方

     

    views目录

    模板页,类似于html页面,传统的开放都是直接把业务逻辑直接写在html里面,在node.js开发中,是分离的

     

    app.js

    调用公共部分。公共插件我们可以写在此文件中,这样就能保证所有页面都能访问的到。

     

    ———————————–

    分割线

    ———————————-

    对于初学者来说,第一次看还是很抽象模糊的,目录和文件的关系还没搞懂,这里我把这些文件都统一写在了一起,方便一下子能看懂。

    下载:app

    run的启动文件改为

    require('runkoa')('/Users/xgllseo/Desktop/koa2_dev/app.js')  //根据自己的路径改

    如果不想使用模块执行也可以使用常规的方式启动koa2

    兼容模式启动:

    node --harmony app.js

     

     

     

  • nvm卸载指定node.js版本号

    nvm 删除 移除 node.js

    正常用nvm卸载node.js版本号的命令是:

    nvm uninstall 6.9.2

     

    但是遇到了权限问题:

    file is not writable: $NVM_DIR/versions/node/v6.9.2/bin/gulp
    Cannot uninstall, incorrect permissions on installation folder.
    This is usually caused by running `npm install -g` as root. Run the following commands as root to fix the permissions and then try again.
    
     chown -R xgllseo "$NVM_DIR/versions/node/v6.9.2"
     chmod -R u+w "$NVM_DIR/versions/node/v6.9.2"

    大意是说有使用过root用户执行npm install -g命令,导致$NVM_DIR/versions/node/v6.9.2/bin/npm这个目录没有写权限,需要修改相应目录的权限。

     

    尝试sudo卸载

    改权限太麻烦了些,尝试sudo用root用户直接卸载。

    $ sudo nvm uninstall 4.4.5
    sudo: nvm: command not found

     

    修改目录权限

    查下 $NVM_DIR这个变量指向那个目录

    $ echo $NVM_DIR
    /Users/xgllseo/.nvm

    其实只要安装之前给的提示做:

    sudo chown -R xgllseo "$NVM_DIR/versions/node/v6.9.2"
    sudo chmod -R u+w "$NVM_DIR/versions/node/v6.9.2"

    再次执行

    nvm uninstall 6.9.2

    http://www.01happy.com/nvm-uninstall-node-permission/

     

  • Nodejs 开发第一个 CLI(命令行界面) 程序

    node.js dos界面 命令程序

    什么是cli命令

    类似于我们平时装win系统时,进入到一个dos界面让我们选择相应的操作,或者输入相应的光标之后安回车之后就开始执行操作。

    node_cli

    类似于这样的就是cli命令。

     

    //run.js
    
    var fs = require('fs');
    var stdin = process.stdin;
    var stdout = process.stdout;
    
    var curDir = process.cwd();
    function getDirectoryData(dir){
     fs.readdir(dir,function(err,files){
       console.log("");
       if(!files.length){
           return console.log(' \0333[31m No files to show! \033[39m\n');
       }
       console.log(' Select which file or directory you want to see! \n');
     
       function file(i){
         var filename = files[i];
     
         var statFile = fs.statSync(__dirname + '/' + filename);
         if(statFile.isDirectory()){
            console.log(' '+ ++i + ' \033[31m' + filename + '/\033[39m');
         }else{
            console.log(' '+ ++i + ' \033[90m' + filename + '\033[39m');
         }
     
         if( i == files.length){
           read();
         }else{
           file(i);
         }
     }
     
     file(0);
     
     function read(){
        console.log('');
        stdout.write(' \033[33m Enter your choice: \033[39m');
        stdin.resume();
        stdin.setEncoding('utf8');
     
        stdin.on('data',option);
     }
     
      function option(data){
        var filename = files[Number(data)-1];
        if(fs.statSync(__dirname + '/' + filename).isDirectory()){
            stdin.pause(); 
            fs.readdir(__dirname + '/' +filename,function(err,files){
                console.log('');
                console.log(' (' + files.length + ' files)');
                files.forEach(function(file){
                   console.log(' -- ' + file);
                });
                console.log('');
            })
        }else{
            stdin.pause();
            fs.readFile(__dirname + '/' +filename,'utf8',function(err,data){
              console.log('');
              console.log('\033[90m' + data.replace(/(.*)/g,' $1') + '\033[39m');
            });
         }
      }
     });
    }
    getDirectoryData(curDir);

     

    http://blog.163.com/hule_sky/blog/static/2091622452016621103745136/ 

     

     

  • 解决:svn: E155015 remains in conflict

    提示就是文件有冲突,问题是别人修改后提交了页面你在修改后也提交了页面导致内容不一样,可以把你和他的内容都合并之后在提交一次你更新的代码就行。

    这里我的解决办法是:

    1,先备份你当前的修改代码

    2,清空本地要提交代码的svn目录

    3,再次在清空的svn目录下check out一次,也就是下载别人修改后的代码,你在把自己的代码重新写进去就行

    4,之后就可以提交自己修改的代码了

    svn commit -m "修改页面"

    (这里还是推荐使用合并的方式比较靠谱,不然会累死自己)

  • mac使用自带svn命令

    mac_svn

    svn客户端使用:

    1,从服务器端下载代码到客户端本地(下载)

    svn checkout svn://localhost/mycode --username=mj --password=123 /Users/apple/Documents/code

    将服务器中mycode仓库的内容下载到/Users/apple/Documents/code目录中

     

    2,从本地导入代码到服务器(第一次初始化导入 上传)

    svn import /Users/apple/Documents/eclipse_workspace/weibo svn://localhost/mycode/weibo --username=mj --password=123 -m "初始化导入"

    将/Users/apple/Documents/eclipse_workspace/weibo中的所有内容,上传到服务器mycode仓库的weibo目录下,后面双引号中的”初始化导入”是注释

     

    3,修改后的代码上传到服务器(上传修改的代码或者添加的代码)

    在步骤1中已经将服务器端的代码都下载到/Users/apple/Documents/code目录中,现在修改下里面的一些代码,然后提交这些修改到服务器

    仅仅只是提交修改代码:

    1> 打开终端,先定位到/Users/apple/Documents/code目录,输入:cd/Users/apple/Documents/code

    2> 输入提交指令:svn commit -m “修改了main.m文件”

     

    往服务器提交全新的文件夹包括里面内容:

    1>要定位到相应目录,svn add ceshi   (会将ceshi目录和它里面内容上传到服务器中)

    2> svn commit -m “xx”

     
    4,更新服务器端的代码到客户端(下载更新)

    这个应该是最简单的指令了,在终端中定位到客户端代码目录后,比如上面的/Users/apple/Documents/code目录,然后再输入指令:

    svn update

     

    5.至于svn的其他用法,可以在终端输入:svn help

    这里列出一大堆svn指令,后面括号中的内容的一般代表着指令的简称,比如我们可以用svn ci代替svn commit,用svn co代替svn checkout

    例如:创建名称为wuhan的目录(后面要有-m 注释没有还不能成功)

    svn mkdir svn://192.168.88.253/hhcf/trunk/02Design/04html/wuhan -m "wuhan"

     

    例如:显示04html目录里面的所有内容

    svn list svn://192.168.88.253/hhcf/trunk/02Design/04html/

     

    mac搭建svn服务器可以参考:

    http://blog.csdn.net/q199109106q/article/details/8655204

     

    —————————————————————————

    分割线

    —————————————————————————

     

    1、将文件checkout到本地目录

    svn checkout path(path是服务器上的目录)
    例如:svn checkout svn://192.168.1.1/pro/domain
    简写:svn co

    2、往版本库中添加新的文件

      svn add file
    例如:svn add test.php(添加test.php)
    svn add *.php(添加当前目录下所有的php文件)

    3、将改动的文件提交到版本库

      svn commit -m “LogMessage” [-N] [–no-unlock] PATH(如果选择了保持锁,就使用–no-unlock开关)
    例如:svn commit -m “add test file for my test” test.php
    简写:svn ci

    4、加锁/解锁

      svn lock -m “LockMessage” [–force] PATH
    例如:svn lock -m “lock test file” test.php
    svn unlock PATH

    5、更新到某个版本

      svn update -r m path
    例如:
    svn update如果后面没有目录,默认将当前目录以及子目录下的所有文件都更新到最新版本。
    svn update -r 200 test.php(将版本库中的文件test.php还原到版本200)
    svn update test.php(更新,于版本库同步。如果在提交的时候提示过期的话,是因为冲突,需要先update,修改文件,然后清除svn resolved,最后再提交commit)
    简写:svn up

    6、查看文件或者目录状态

      1)svn status path(目录下的文件和子目录的状态,正常状态不显示)
    【?:不在svn的控制中;M:内容被修改;C:发生冲突;A:预定加入到版本库;K:被锁定】
    2)svn status -v path(显示文件和子目录状态)
    第一列保持相同,第二列显示工作版本号,第三和第四列显示最后一次修改的版本号和修改人。
    注:svn status、svn diff和 svn revert这三条命令在没有网络的情况下也可以执行的,原因是svn在本地的.svn中保留了本地版本的原始拷贝。
    简写:svn st

    7、删除文件

      svn delete path -m “delete test fle”
    例如:svn delete svn://192.168.1.1/pro/domain/test.php -m “delete test file”
    或者直接svn delete test.php 然后再svn ci -m ‘delete test file‘,推荐使用这种
    简写:svn (del, remove, rm)

    8、查看日志

      svn log path
    例如:svn log test.php 显示这个文件的所有修改记录,及其版本号的变化

    9、查看文件详细信息

      svn info path
    例如:svn info test.php

    10、比较差异

      svn diff path(将修改的文件与基础版本比较)
    例如:svn diff test.php
    svn diff -r m:n path(对版本m和版本n比较差异)
    例如:svn diff -r 200:201 test.php
    简写:svn di

    11、将两个版本之间的差异合并到当前文件

      svn merge -r m:n path
    例如:svn merge -r 200:205 test.php(将版本200与205之间的差异合并到当前文件,但是一般都会产生冲突,需要处理一下)

    12、SVN 帮助

      svn help
    svn help ci

    ——————————————————————————

    以上是常用命令,下面写几个不经常用的

    ——————————————————————————

    13、版本库下的文件和目录列表

      svn list path
    显示path目录下的所有属于版本库的文件和目录
    简写:svn ls

    14、创建纳入版本控制下的新目录

    svn mkdir: 创建纳入版本控制下的新目录。
    用法: 1、mkdir PATH…
    2、mkdir URL…
    创建版本控制的目录。
    1、每一个以工作副本 PATH 指定的目录,都会创建在本地端,并且加入新增
    调度,以待下一次的提交。
    2、每个以URL指定的目录,都会透过立即提交于仓库中创建。
    在这两个情况下,所有的中间目录都必须事先存在。

    15、恢复本地修改

    svn revert: 恢复原始未改变的工作副本文件 (恢复大部份的本地修改)。revert:
    用法: revert PATH…
    注意: 本子命令不会存取网络,并且会解除冲突的状况。但是它不会恢复
    被删除的目录

    16、代码库URL变更

    svn switch (sw): 更新工作副本至不同的URL。
    用法: 1、switch URL [PATH]
    2、switch –relocate FROM TO [PATH…]
    1、更新你的工作副本,映射到一个新的URL,其行为跟“svn update”很像,也会将
    服务器上文件与本地文件合并。这是将工作副本对应到同一仓库中某个分支或者标记的
    方法。
    2、改写工作副本的URL元数据,以反映单纯的URL上的改变。当仓库的根URL变动
    (比如方案名或是主机名称变动),但是工作副本仍旧对映到同一仓库的同一目录时使用
    这个命令更新工作副本与仓库的对应关系。

    17、解决冲突

    svn resolved: 移除工作副本的目录或文件的“冲突”状态。
    用法: resolved PATH…
    注意: 本子命令不会依语法来解决冲突或是移除冲突标记;它只是移除冲突的
    相关文件,然后让 PATH 可以再次提交。

    18、输出指定文件或URL的内容。

    svn cat 目标[@版本]…如果指定了版本,将从指定的版本开始查找。
    svn cat -r PREV filename > filename (PREV 是上一版本,也可以写具体版本号,这样输出结果是可以提交的)

    http://www.cnblogs.com/heiniuhaha/archive/2011/11/11/2245594.html