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.jsbody.jsmain.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>:撤销发布果过的某个版本的代码

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

转载于:https://www.cnblogs.com/renyuzhuo/p/5053569.html

【nodejs学习】0.nodejs学习第一天相关推荐

  1. 《深度学习,统计学习,数学基础》人工智能算法工程师手册:程序员写的AI书,50 章一网打尽...

    来源:专知 本文约3400字,建议阅读10+分钟. 免费开源人工智能手册,带你快速上手写代码! [ 导读 ]市面上很多人工智能相关的书籍.大部分的书,面向小白,内容深度不够:小部分教材书或者科研书,内 ...

  2. 《深度学习,统计学习,数学基础》人工智能算法工程师手册

    [ 导读 ]市面上很多人工智能相关的书籍.大部分的书,面向小白,内容深度不够:小部分教材书或者科研书,内容艰深,又过于复杂.那么有没有,面向算法工程师(程序员)人群的,面向有一定数学基础.算法基础,能 ...

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

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

  4. nodejs安装以及使用学习

    nodejs安装以及使用学习 nodejs中文网下载地址:http://nodejs.cn/ 提示:尽量不要安装到c盘! (1)安装完成后Windows+R打开cmd (2)![打开操作框后输入nod ...

  5. nodejs的下载安装及环境配置及常见问题--react学习必备--nodejs重新安装前的必要卸载

    学习react我们首先需要使用react和react-dom这两个包,然而在终端用npm触发这一事件的前提是已经安装了nodejs.提示为 npm : 无法将"npm"项识别为 c ...

  6. 《React-Native系列》14、 RN学习之NodeJS

    由于ReactNative使用了NodeJS环境,以前没有系统学习过NodeJS,故花点时间学习下.了解ReactNative里关于NodeJS部分的知识. 我们先看看一个RN项目的目录,如下: 我们 ...

  7. 日语课程0基础学习笔记——第一课

    学习目标: 编程0基础学习笔记--前言 这是一个个人使用的日语学习记录博客!根据B站的up日语教程一直跟下来,从第一天开始记录.后续会把我学习的内容和知识点尽量多的记录在这个博客中,不仅是方便自己复习 ...

  8. 从0开始学习GitHub系列之「认识并加入GitHub」

    从0开始学习GitHub系列之「认识并加入GitHub」 糖果果| 2016-06-16 16:01    浏览量(245)    评论(0)   推荐(0) 数据 小编注:[从0开始学习 GitHu ...

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

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

  10. 资源|2019 年 11 月最新《TensorFlow 2.0 深度学习算法实战》中文版教材免费开源(附随书代码+pdf)...

    点击上方"AI遇见机器学习",选择"星标"公众号 重磅干货,第一时间送 2019 年 10 月,谷歌正式宣布,开源机器学习库 TensorFlow 2.0 现在 ...

最新文章

  1. 2021年大数据Spark(五十三):Structured Streaming Deduplication
  2. java原子变量的作用_AtomicInteger原子类的作用介绍(代码示例)
  3. clipse3.2/3.3中指定第三方包(JAR)和类路径(CLASSPATH)的几个方法(转做笔记)
  4. SQL开发好助手—SQL Assistant 5
  5. oracle mysql sql serve where in 语句的不同
  6. .NET创建WebService服务简单的例子
  7. 职称计算机考试word2003真题,职称计算机考试《Word2003》历年真题回顾(1)
  8. 平台(洛谷P1105题题解,Java语言描述)
  9. 详述由ENQ:TX – ROW LOCK CONTENTION引起的全局死锁处理过程
  10. mysql ibtmp1 太大_mysql5.7 ibtmp1文件过大
  11. IMP导入数据 报错 IMP-00058 ORA-01691 IMP-00028
  12. weblogic下载及安装
  13. pkpm板按弹性计算还是塑性_PKPM楼板计算
  14. Python获取某平台主播照片, 实现颜值检测, 进行排名
  15. ggplot2_ `scale_xxx()`标度调整
  16. android开发中磁场传感器,Android传感器(加速度传感器,磁场传感器,光线传感器,方向传感器)...
  17. STM32F407-用TB6600驱动器驱动57步进电机(代码+连线)
  18. iocomp ActiveX/VCL各版本大比拼之Crack
  19. (PHP)获取微信支付平台证书步骤
  20. android的四种对象引用级别:强、弱、软、虚引用

热门文章

  1. Unity Lerp函数的妙用
  2. git rebase和 merge的区别
  3. 重要提醒,单片机发展史,它到底是一个什么东西
  4. linux系统redis单机版安装及设置解决DENIED Redis is running in protected mode because protected mode is enabled问题
  5. java多行字符串变量_java – Scala – 如何在多行字符串文字中使用变量
  6. 做一个简单的python爬虫_python制作一个简单网络爬虫
  7. 软件公司产品营销大数据分析(上)
  8. python将txt文档中的内容按字母顺序进行排序,并存入txt中
  9. 基于协同过滤,NMF和Baseline的推荐算法
  10. BZOJ1468Tree——点分治