【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 node2.添加执行权限:chmod +x /home/user/bin/node-echo.js3.在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 原创文章,可以随意 ...
随机推荐
- 3D dungeon
算法:广搜: 描述 You are trapped in a 3D dungeon and need to find the quickest way out! The dungeon is comp ...
- 关于C++的变量和类的声明和定义
什么是变量?变量或者叫对象,是一个有具名的.可以供程序操作的存储空间.这里具名是指变量是有名字的,可供操作是指能进行加减乘除或者输入输出等操作,存储空间则是指有一块属于它的内存空间. 为了便于说明,标 ...
- javascript中的事件问题
事件的类型: (1)鼠标事件: click用户点击鼠标时发生,当用户的焦点在按钮上,并按了回车键,同样会触发这个事件 dbclick 用户双击鼠标左键时发生 mouseover 鼠标移出某个 ...
- Nginx常用Rewrite伪静态法则
信赖此刻大部门用Linux VPS的伴侣都在利用这个敏捷传布的Nginx,本日就清算一下最常见的PHP法式的Rewrite(伪静态法则). Wordpress: location / {index i ...
- CentOS6.4 GOOGLE chrome install
yum install http://people.centos.org/hughesjr/chromium/6/i386/RPMS/chromium-28.0.1500.45-205727.i686 ...
- SQLServer 2008 删除、压缩日志
SQL Server 2008删除或压缩数据库日志的方法 由于数据库日志增长被设置为“无限制”,所以时间一长日志文件必然会很大,一个400G的数据库居然有600G的LOG文件,严重占用了磁盘空间.由于 ...
- Orchard之创建模板
orchard创建模板的两种基本方式: 第一种:通过候补创建(需要用到候补神器): 第二种:通过Shape Tracing创建:
- APKTool用法
APKTool是GOOGLE提供的APK编译工具,需要JAVA运行环境,推荐使用JDK1.6或者JDK1.7. 如果你想对APK文件进行修改,那么就不可避免的要使用到APKTool.论坛里有很多关于R ...
- 涂抹Oracle—Flashback
11.1 基于flashback查询过去的数据 a.基于时间的查询(as of timestamp) 构造表falsh_tbl,删除数据然后查询 SQL>select * from flash ...
- Android Timer的使用
1:服务端使用PHP <?php echo date('Y-m-d H:i:s'); ?> 2:activity_main.xml <RelativeLayout xmlns:and ...