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:\Users\users\bin目录
2.在C:\Users\users\bin目录下新建node-echo.cmd文件,文件内容为:@node "C:\User\user\bin\node-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>:撤销发布果过的某个版本的代码

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

【nodejs学习】0.nodejs学习第一天的更多相关文章

  1. 七天学会NodeJS (原生NodeJS 学习资料 来自淘宝技术团队)

    NodeJS基础 什么是NodeJS JS是脚本语言,脚本语言都需要一个解析器才能运行.对于写在HTML页面里的JS,浏览器充当了解析器的角色.而对于需要独立运行的JS,NodeJS就是一个解析器. ...

  2. Vue学习笔记-nodejs+vue-cli4+webpack按装配置+项目创建

    一  使用环境: windows 7 64位操作系统 二  Vue学习-nodejs按装配置,Node.js 就是运行在服务端的 JavaScript. 1. 去nodejs的官网下载  https: ...

  3. nodejs 开发,手把手开始第一个服务器程序(原生)

    此文章为原生 nodejs  ,仅做学习使用 想学习 express 和 koa2 的小伙伴请绕路 此文章适合有HTML 和css .js 基础的小伙伴看哦 如果能帮到你,荣幸之至 文章纯手打,如有纰 ...

  4. 从0开始学习 GitHub 系列汇总笔记

    本文学习自Stromzhang, 原文地址请移步:从0开始学习 GitHub 系列汇总 我的笔记: 0x00  从0开始学习GitHub 系列之[初识GitHub] GitHub 影响力 a.全球顶级 ...

  5. 20145208 《Java程序设计》第0周学习总结

    20145208 <Java程序设计>第0周学习总结 阅读心得 读了老师推荐的几个文章,虽然第四个文章"为什么一定要自学"报告资源不存在而无法阅读,其他的三篇文章都言之 ...

  6. emberjs学习一(环境和第一个例子)

    code { margin: 0; padding: 0; white-space: pre; border: none; background: transparent; } code, pre t ...

  7. Bootstrap3.0入门学习系列

    Bootstrap3.0入门学习系列规划[持续更新]   前言 首先在此多谢博友们在前几篇博文当中给与的支持和鼓励,以及在回复中提出的问题.意见和看法. 在此先声明一下,之前在下小菜所有的随笔文章中, ...

  8. 从0开始学习 GITHUB 系列之「向GITHUB 提交代码」【转】

    本文转载自:http://stormzhang.com/github/2016/06/04/learn-github-from-zero4/ 版权声明:本文为 stormzhang 原创文章,可以随意 ...

  9. 从0开始学习 GITHUB 系列之「GIT 速成」【转】

    本文转载自:http://stormzhang.com/github/2016/05/30/learn-github-from-zero3/ 版权声明:本文为 stormzhang 原创文章,可以随意 ...

  10. 从0开始学习 GITHUB 系列之「加入 GITHUB」【转】

    本文转载自:http://stormzhang.com/github/2016/05/26/learn-github-from-zero2/ 版权声明:本文为 stormzhang 原创文章,可以随意 ...

随机推荐

  1. C++中的函数指针

    寒假这些天在看<The C++ Programming Language, 3rd>. 今天看到Chapter7 Function,里头好一些东西是C语言里没有的,比如overload.p ...

  2. QML之窗口(无边框、透明及拖拽)

    1.无边框 Qt Quick 2.0 中 QQuickView代替了1.0中的QDeclarativeView. 无边框窗口代码如下: QQuickView viwer; //QQuickView继承 ...

  3. uva 12207 - That is Your Queue

    #include <cstdio> #include <iostream> #include <deque> using namespace std; int ma ...

  4. 【基础教程】推荐10+必备的 WordPress 常用插件

    1.Akismet Akismet 是 WordPress 官方推荐的一款 WordPress 防垃圾评论插件,也是默认已安装的插件. 2.WP-Postviews 最好的最流行的WordPress浏 ...

  5. spring事务分类简述

    spring事务的传播行为是面试中经常被问到的问题,要将事务的传播行为与隔离级别熟练的掌握,在实际开发过程中,特别是在并发高.更新数据量大.关系表比较多的情况下,经常会遇到关于事务的问题.首先,要了解 ...

  6. nginx_笔记分享_php-fpm详解

    参考 http://syre.blogbus.com/logs/20092011.htmlhttp://www.mike.org.cn/articles/what-is-cgi-fastcgi-php ...

  7. arclist标签和list标签区别

    很多站长朋友在刚入门织梦的时候对织梦的标签存在很多的困惑,关于arclist标签和list标签,甚至不知道啥时候用arclist,啥时用list标签.arclist 为自由列表,全局模板中都生效,一般 ...

  8. Docker for Windows

    Docker for Windows使用简介 在上一篇文章中,通过演练指导的方式,介绍了在Docker中运行ASP.NET Core Web API应用程序的过程.本文将介绍Docker for Wi ...

  9. xampp 命令行修改数据库密码

    进入xampp 下 ./mysql -u root -p password 进入mysql控制台 UPDATE mysql.user SET Password=PASSWORD('password') ...

  10. Unity中的各种寻找GameObject方法

    1.GameObject.Find():寻找Hierarchy面板中的activie 不为false的游戏对象: 路径如官方事例写法: public class ExampleClass : Mono ...