【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:\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学习第一天的更多相关文章
- 七天学会NodeJS (原生NodeJS 学习资料 来自淘宝技术团队)
NodeJS基础 什么是NodeJS JS是脚本语言,脚本语言都需要一个解析器才能运行.对于写在HTML页面里的JS,浏览器充当了解析器的角色.而对于需要独立运行的JS,NodeJS就是一个解析器. ...
- Vue学习笔记-nodejs+vue-cli4+webpack按装配置+项目创建
一 使用环境: windows 7 64位操作系统 二 Vue学习-nodejs按装配置,Node.js 就是运行在服务端的 JavaScript. 1. 去nodejs的官网下载 https: ...
- nodejs 开发,手把手开始第一个服务器程序(原生)
此文章为原生 nodejs ,仅做学习使用 想学习 express 和 koa2 的小伙伴请绕路 此文章适合有HTML 和css .js 基础的小伙伴看哦 如果能帮到你,荣幸之至 文章纯手打,如有纰 ...
- 从0开始学习 GitHub 系列汇总笔记
本文学习自Stromzhang, 原文地址请移步:从0开始学习 GitHub 系列汇总 我的笔记: 0x00 从0开始学习GitHub 系列之[初识GitHub] GitHub 影响力 a.全球顶级 ...
- 20145208 《Java程序设计》第0周学习总结
20145208 <Java程序设计>第0周学习总结 阅读心得 读了老师推荐的几个文章,虽然第四个文章"为什么一定要自学"报告资源不存在而无法阅读,其他的三篇文章都言之 ...
- emberjs学习一(环境和第一个例子)
code { margin: 0; padding: 0; white-space: pre; border: none; background: transparent; } code, pre t ...
- Bootstrap3.0入门学习系列
Bootstrap3.0入门学习系列规划[持续更新] 前言 首先在此多谢博友们在前几篇博文当中给与的支持和鼓励,以及在回复中提出的问题.意见和看法. 在此先声明一下,之前在下小菜所有的随笔文章中, ...
- 从0开始学习 GITHUB 系列之「向GITHUB 提交代码」【转】
本文转载自:http://stormzhang.com/github/2016/06/04/learn-github-from-zero4/ 版权声明:本文为 stormzhang 原创文章,可以随意 ...
- 从0开始学习 GITHUB 系列之「GIT 速成」【转】
本文转载自:http://stormzhang.com/github/2016/05/30/learn-github-from-zero3/ 版权声明:本文为 stormzhang 原创文章,可以随意 ...
- 从0开始学习 GITHUB 系列之「加入 GITHUB」【转】
本文转载自:http://stormzhang.com/github/2016/05/26/learn-github-from-zero2/ 版权声明:本文为 stormzhang 原创文章,可以随意 ...
随机推荐
- 《Linux内核分析》 week6作业-Linux内核fork()系统调用的创建过程
一.进程控制块PCB-stack_struct 进程在操作系统中都有一个结构,用于表示这个进程.这就是进程控制块(PCB),在Linux中具体实现是task_struct数据结构,它主要记录了以下信息 ...
- redis数据结构HyperLogLog
如果我们要实现记录网站每天访问的独立IP数量这样的一个功能 集合实现: 使用集合来储存每个访客的 IP ,通过集合性质(集合中的每个元素都各不相同)来得到多个独立 IP ,然后通过调用 SCARD 命 ...
- phpcms v9联动菜单实现筛选
<!--初始化init--> {php $theurl = "index.php?m=content&c=index&a=lists&catid=$cat ...
- eclipse下编译openfire3.9.1源码
[一].下载源码 打开网址:http://www.igniterealtime.org/downloads/source.jsp 选择目前最新版本 openfire_src_3_9_1.zip 下载. ...
- nginx读书日志
2016.12.20 nginx 功能特性: 既可以作为http服务器,也可以作为反向代理服务器或者邮件服务器 基本服务:处理静态文件,处理索引文件以及支持自动索引 nginx服务器中主要由proxy ...
- windows 下安装使用ipython
转自:https://my.oschina.net/u/1431433/blog/189337 1. 下载安装Python 下载: python-3.3.3.amd64.msi (救在Python.o ...
- BZOJ 2693 jzptab
http://www.lydsy.com/JudgeOnline/problem.php?id=2693 题解: 考虑把lcm转化成gcd那答案就是然后神奇的设:就有:一样可以枚举 的取值,这是O(√ ...
- Android读取Assert文件夹下txt文本并变为String的方法
使用场景,在assert文件夹下 有些文本文件,我们需要通过工具类读取出来,然后放到String字符串中,我们该如何操作呢: 直接上代码: 使用方法: MyActivity.readAssertRes ...
- Android中PopupWindow中有输入框时无法弹出输入法的解决办法
PopupWindow window=new PopupWindow(view, LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT); //必须让p ...
- Android取得屏幕的高度和宽度
//获得手机屏幕的宽度和高度 width=getWindowManager().getDefaultDisplay().getWidth(); height=getWindowManager().ge ...