初学NODE 学习笔记

NODE 学习笔记(一)

NODE是什么

  • NODE不是后台开发语言,我们了解的JAVA、PHP、C#、.NET(dot net)...才是后台开发语言,NODE仅仅是一个工具,一个基于V8引擎来渲染和解析JS的平台和工具(有点类似浏览器)

在真实的开发中,我们一般都把NODE安装在服务器端,这样我们就可以在服务器端编写一些JS代码来处理服务器端的业务逻辑了,
=>JS不仅仅可以在客户端浏览器中运行处理客户端业务逻辑(前端开发语言),也可以在服务器端的NODE环境下运行处理服务器端业务逻辑(后台开发语言),所以可以变相的说JS是全栈开发语言

NODE如何去执行JS代码

  • WebStorm:在JS文件的空白处,右键,找到 Run xxx.js 就是在WB中调取NODE环境执行我们的JS代码(目前在用WB)

  • 在当前JS所在的文件目录中打开DOS窗口,在DOS中执行 node xxx.js 也相当于把JS代码在NODE环境下执行了

  • NODE的REPL命令: 打开命令行,直接输入node出现 ‘ >’ 说明已经进入REPL,
    REPL(Read-Eval-Print Loop,简称REPL,“读取-求值-输出”循环)是一个简单的,交互式的编程环境。
    REPL既可以作为独立单机程序,也可以被其他的程序包含在内的程序。
    它提供了一种交互方式,即“执行程序,展现结果”。
    它可以被用作debugging,testing 或者只是执行操作得到一些结果。

NODE的优势

  • 快:基于V8引擎渲染和解析的
  • NODE是单线程基于事件驱动的异步操作
  • NODE提供了无阻塞的I/O操作
    I/O:input/output 对文件的增删改查操作

1、JS在客户端浏览器中运行的时候是否可以对客户端本地的文件进行I/O操作?
答:不可以,因为我们要保证客户端的安全,JS做为前端开发语言是不可以操作客户端本地文件的,但是浏览器也提供了部分需要用户自主操作的功能,例如:上传图片等

2、JS在服务器端NODE环境下运行的时候是否可以对服务器上的文件进行I/O操作?
答:可以的。

学习NODE从模块开始学起

  • 内置模块:自身自带的 http、url、fs 等
    • http:提供HTTP服务器功能。
    • url:用于解析URL。
    • fs:操作文件系统。
    • 其他
  • 自定义模块:自己编写的
  • 第三方模块:别人写好的,我们来调取使用
    • 安装NODE之后自带npm命令,用来管理第三方模块的。
    • 所有我们需要调取的第三方模块都在https://www.npmjs.com/这个网站中
使用npm安装模块(分两种)

  1、安装到全局(global)
    npm install xxx(模块名字) -g
    npm uninstall xxx -g   //卸载已安装在全局模块
     // mac os 终端下需要在命令前加sudo
    sudo npm install xxx(模块名字) -g
    sudo npm uninstall xxx -g  

  2、安装在当前的项目下
    npm install xxx(模块名字)
    npm uninstall xxx 
把模块安装到全局的问题:

以后不管是在哪一个项目目录下,我们都可以"通过使用命令操作的方式"来进行操作,
同时存在以下两个问题:

  1. 不能通过"代码导入的方式"使用这个模块;
  2. 安装在全局有很多时候会导致版本号冲突,例如:我之前安装的是LESS的2.7版本,以前的项目都是使用这个版本开发的,后来LESS升级了,升级到3.1,新版本和之前的版本不太一样,如果全局安装最新的,原来的项目就没办法使用LESS了
把模块安装到当前项目中的问题:
  1. 不能像安装在全局一样使用命令了,但是可以使用JS导入的方式,正好与全局相反

解决方案:在package.json 文件的scripts这个属性中进行配置

      "scripts": {  //->配置NPM脚本命令
             "myScript": "lessc -v"   //检查version配置
       }
      //这样以后在终端中只需要执行npm run myScript,就也可以通过命令操作的方式执行lessc -v这个命令了
  1. 在当前的项目中会有一个node_modules文件夹,里面存储的都是我们当前项目所需要使用的模块(这个文件夹很大的,当需要传递给其他人时非常的不好处理)

解决方案:上传gitHub的时候在项目目录中增加一个文件:.gitignore 这个文件中可以配置上传的时候忽略哪些文件,这些被忽略的文件就不在上传了

3.我们把一些第三方模块安装在A项目下,B项目不能直接的导入使用,如果需要的话还需要在B项目中重新的下载安装一遍(通过npm install)

解决方案:需要在安装第三方模块的时候,把当前项目 的所需要的模块清单写入到package.json的开发依赖项中(通 过以下命令)
npm install xxx --save-dev 放在开发依赖模块清单中("devDependencies")
npm install xxx --save 放在生产依赖的模块清单中("dependencies")

再来一个B项目如果还是需要这些模块,我们就没有必要一个个的安装了,只需要把package.json文件拷贝到B项目中,然后执行 npm install 即可,这样的系统就会默认按照我们的开发依赖清单一个个的下载 =>"跑环境"
那么package.json 长什么样呢?

//我们平时在做项目开发的时候,首先会在当前项目的根目录路径的终端下执行:
 //npm init -y
//这样执行完成后,会在当前项目的根目录下生成一个文件:package.json
   {
     "name": "20170222", //->项目名称
     "version": "1.0.0", //->项目的版本号
     "description": "", //->当前项目的描述
     "main": "temp.js", //->当前项目的主体(入口)
     "dependencies": {  //->当前项目依赖的第三方模块清单(生产:项目发布上线版本)
       "less": "^2.7.2"
     },
     "devDependencies": {}, //->当前项目依赖的第三方模块清单(开发:项目正在研发)
     "scripts": {//->命令脚本
       "test": "echo \"Error: no test specified\" && exit 1",
       "myScript": "lessc -v"
     },
     "keywords": [],
     "author": "",
     "license": "ISC"
   }

在NODE环境下,它认为每一个JS都可以理解为一个单独的模块,所以我们创建模块只需要创建JS文件即可;并且每一个模块和模块之间是互不干扰的;

模块与模块之间方法的互相调用:

A模块:fn
B模块:调取fn这个方法
在node环境中,用require导入,
在导入自定义模块的时候需要加上' ./ '才可以,此处是当前路径,根据具体路径添加。
在导入第三方和内置模块的时候不能加' ./ '(特例)直接写,也不需要指定目录,直接写模块名即可,
(它自己会先到node_modules中找已经安装的第三方模块,如果没有会到内置中找,如果再没有就报错了)

var a = require('./A')   //  自定义模块
var lessc = require('less') //第三方模块
var http = require('http') //内置模块

在A模块中 (A.js中)
function fn(){
    console.log('my name is A')
}
//->把A模块中可以供其它模块调取使用的方法导出,只有这样其它的模块才可以调用
module.exports = {
    fn:fn
}

在B模块中 (B.js中)
// ->先导入A模块
var a = require('./A')
function fn(){
    console.log('my name is A')
}
a.fn();

以上仅供为自己学习总结使用,同时希望理解后的知识能对他人有所帮助,如有不妥,还望指正!在此感谢!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,723评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,080评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,604评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,440评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,431评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,499评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,893评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,541评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,751评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,547评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,619评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,320评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,890评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,896评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,137评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,796评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,335评论 2 342

推荐阅读更多精彩内容

  • JavaScript 模块化编程 网站越来越复杂,js代码、js文件也越来越多,会遇到什么问题? 命名冲突; 文件...
    magic_pill阅读 1,406评论 0 1
  • (二)用node.js内置模块,模拟搭建简单服务器(静态资源文件请求的处理); 明确:NODE是用来开发后台,服务...
    史密斯_Du阅读 387评论 1 4
  • 个人入门学习用笔记、不过多作为参考依据。如有错误欢迎斧正 目录 简书好像不支持锚点、复制搜索(反正也是写给我自己看...
    kirito_song阅读 2,445评论 1 37
  • Node.js是目前非常火热的技术,但是它的诞生经历却很奇特。 众所周知,在Netscape设计出JavaScri...
    w_zhuan阅读 3,606评论 2 41
  • 乔家大院的孙茂才,穷酸落魄至乞丐,后投奔乔家,为乔家的生意立下汗马功劳,享有一定地位。因私欲被赶出乔家。 后来,孙...
    寒江雪810阅读 580评论 0 0