• 【nodejs学习】0.nodejs学习第一天


    1.模块

    大一点的程序都需要模块化,nodejs也不例外,代码放到不同的文件中,每一个文件就可以是一个模块,文件路径名就是一个模块名。每个模块中包含三个预先定义的变量:

    1.require:用于在当前模块中加载和使用别的模块,传入一个模块名,返回一个模块导出对象,".js"可以省略。

        eg:var fool1 = require('./foo');//.foo.js,/home/user/foo

               var data = require('./data.json');//加载json文件

    2.exports:当前模块导出对象,用于导出模块的共有方法和属性,其他模块通过require使用当前模块就是当前模块的exports对象。

        eg:exports.hello = function(){

                   conscole.log('Hello World!');

               }

    3.model:可以访问当前模块的一些相关信息,最多的用途是替换当前的导出对象。如模块导出对象时一个普通的对象,如果改成一个函数的话,可以:

        eg:module.exports = function(){

                    conscole.log('Hello World!');

               }

    2.模块初始化

    一个模块中的js代码仅在第一次使用时执行一次,并在执行过程中初始化模块的导出对象,之后缓存起来的导出对象被重复利用。

    3.主模块

    用于启动程序,相当于C语言中的main函数

    //counter.js

    var i = 0;

    function count(){

       return i++;

    }

    exports.count = count;

    //main.js

    var counter1 = require('./counter.js');

    var counter2 = require('./counter.js');

    console.log(counter1.count());//0

    console.log(counter2.count());//1

    console.log(counter2.count());//2

     

    $ node main.js

    0

    1

    2

    //?为什么不是1,2,3请自己思考,网上某些资料写的是1,2,3

    4.模块路径解析规则

    1.内置模块不做路径解析直接返回内部模块导出对象。eg:require('fs');//fs和http是内置对象

    2.node_modules目录:这个特殊的目录用来存放模块,如某个模块的绝对路径是/home/user/hello.js,使用require('foo/bar')方式加载,则nodejs尝试:

        /home/user/node_modules/foo/bar

        /user/node_modules/foo/bar

        /node_modules/foo/bar

    3.NODE_PATH,在使用require('foo/bar')时,会一次加载NODE_PATH中的目录。

    5.包

    包内的文件放在一个目录中,包的所有子模块需要一个入口模块,入口模块的导出对象被作为包的导出对象。

    如果模块的文件名为index.js,可以使用文件路径省略index使用模块,这样的话,就可以require一个包,更有整体感。

    6.package.json

    如果想自定义入口模块的文件名和存放位置,就需要在包目录下包含一个package.json,并在其中指定入口模块的路径。

    - /home/user/lib/
        - cat/
            + doc/
            - lib/
                head.js
                body.js
                main.js
            + tests/
            package.json
    //package.json
    {
        "name": "cat",
        "main": "./lib/main.js"
    }
    require('/home/user/lib/cat')方式可以加载模块
    7.命令行程序
    Linux
    1.添加注释:#! /usr/bin/env node
    2.添加执行权限:chmod +x /home/user/bin/node-echo.js
    3.在path中指定路径:sudo ln –s /home/user/bin/node-echo.js /user/local/bin/node-echo
    可以在任何目录下使用node-echo命令了
    Windows
    1.PATH中配置C:Usersusersin目录
    2.在C:Usersusersin目录下新建node-echo.cmd文件,文件内容为:@node "C:Useruserin
    ode-echo.js" %*
    可以在任何目录下使用node-echo命令了
    8.工程目录
    - /home/user/workspace/node-echo/   # 工程目录
        - bin/                          # 存放命令行相关代码
            node-echo
        + doc/                          # 存放文档
        - lib/                          # 存放API相关代码
            echo.js
        - node_modules/                 # 存放三方包
            + argv/
        + tests/                        # 存放测试用例
        package.json                    # 元数据文件
        README.md                       # 说明文件

    其中部分文件

    /* bin/node-echo */
    var argv = require('argv'),
        echo = require('../lib/echo');
    console.log(echo(argv.join(' ')));
    
    /* lib/echo.js */
    module.exports = function (message) {
        return message;
    };
    
    /* package.json */
    {
        "name": "node-echo",
        "main": "./lib/echo.js"
    }
    上面这些代码还不能执行,还没有完成,不要着急。
    9.NPM
    $ npm install argv
    或者是在package.json中添加
    "dependencies":{
        "argv":"0.0.2"
    }
    在工程目录下使用npm install命令批量安装三方包,以后node-echo也上传到服务器,别人下载这个包,会根据申明的第三方依赖自动下载进一步依赖的三方包,使用npm install node-echo命令,自动创建一下目录

     

    附录:

    1.npm adduser:新建用户

    2.npm publish:发布代码

    3.npm help:

    捕获

    npm help 命令名,打开html帮助

    4.在package.json所在目录下,使用npm install . -g可在本地安装当前命令行程序,用于发布前测试

    5.npm update <package>:更新模块

    6.npm update <package> –g:全局更新

    7.npm cache clear:清空NPM本地缓存

    8.npm unpublish <package>@<version>:撤销发布果过的某个版本的代码

    这些作为准备知识,接下来会继续学习

  • 相关阅读:
    【Redis】跳跃表原理分析与基本代码实现(java)
    小鹤音形指引
    Maven
    算法思维(长期更)
    多路平衡树之红黑树
    多路平衡树之B树
    多路平衡树之2-3查找树
    栈与队列
    树基本概念
    Vue学习
  • 原文地址:https://www.cnblogs.com/renyuzhuo/p/5053569.html
Copyright © 2020-2023  润新知