前言

  业余时间充实自我,入手学习了解一下传说中纯事件驱动/非阻塞的js架构 --nodejs

  好记性不如烂笔头,本系列随笔用于整理记录学习nodejs过程中的心得

目录

  1. nodejs简介
  2. nodejs安装
  3. nodejs加载模块

1. nodejs简介

  nodejs基于Google开源js引擎V8开发,从2009年诞生起就获得强烈关注,是一套用来编写高性能网络服务器的js工具包。简单的说 nodejs 就是运行在服务端的 JavaScript。

  优势:

  •   纯事件驱动,异步非阻塞。框架内部提供的大多api都是异步调用风格,无需等待某个操作完成
  •   单线程。这里的单线程指主线程为单线程,所有的阻塞的全部放入一个线程池中,然后主线程通过队列的方式跟线程池来协作
  •   易入手。基于js语言,js是开发者必备的一项技能,不用再单独新学一门陌生的语言,降低了学习的门槛
  •   高效稳定。选择了目前最快的浏览器内核V8做为执行引擎,保证了Nodejs的性能和稳定性

  弱势:

  •   业务复杂程序。面对复杂业务,需要大量计算显然是没有后台代码给力
  •   内存管控。js是一门弱类型语言,数据结构较为单一。对象都是基于json,无法使用内存管控
  •   不需要异步的程序。对于nodejs的异步特性来说,不需要异步操作的程序可能会比较麻烦

2. nodejs安装

  由于本人基于Windows系统开发,这里只介绍Windows环境安装过程。

  打开nodejs官网找到自己环境相匹配的安装文件下载(需要区分32位还是64位),这里我安装的最新版本v10.15.0-x64

  下载地址:https://nodejs.org/en/download/releases/

  安装下载好的文件,(傻瓜式安装一直下一步即可)

  安装过后WIN-R打开cmd命令窗口运行指令 node -v查看是否对应安装的版本,即是否安装成功

  

  扩展:安装和应用包管理(NPM)

  NPM是三位一体的系统——第三方包库,管理计算机中安装的包的机制以及定义包依赖关系。当我们使用npm去安装一些第三方库的时候,安装包会放在运行NPM命令时所在的目录中的node_modules文件夹中,从v0.6.0以后npm就已经包含在nodejs的安装包内。

  在cmd命令窗口执行npm init先初始化NPM,以填写表单方式初始化生成一个新的package.json文件。(都有默认值一直下一步即可)

  初始化后即可通过NPM安装需要的插件,通过命令指向安装的文件夹路径,再执行安装命令npm install <package name>@<version>安装所需的第三方包(version不填代表最新版本),命令行完成之后,我们会看到在文件夹中就新建了一个node_modules文件夹,并且把我们需要的库已经安装在文件夹中,如下图:

  

  

  NPM两种模式:

  本地模式(默认):该模式只工作在本地文件夹层次,不会引起系统范围的变化,如果想安装包时不对本地已安装的包造成影响,本地模式十分合适。

  全局模式:全全局模式适合安装那些全局可用的包,比如提供命令行实用工具的包或不被应用程序直接调用的包。

  安装包: npm install  <package name>@<version>

  安装全局模式包:npm install -g ...

  卸载包:npm uninstall  ...

  卸载全局模式包:npm uninstall -g ...

  更新包:npm update ...

  更新全局模式包:npm update -g ...

3. nodejs加载模块

  nodejs取消了JavaScript默认的全局名称空间,使用commonjs模块系统取代,可以直接使用require函数加载模块,如果模块存在并且没有错误语法,那么调用require()函数就会返回这个模块对象

  3.1.加载核心模块

  核心模块是nodejs框架内部自带且非常重要常用的,核心模块不能通过文件路径引用只能通过模块名引用,即使已经存在一个与其同名的第三方模块也会被优先加载。例如想加载和使用http核心模块

  var http = require('http');

  这里会返回http模块对象,细节可参见nodejs的httpapi文档

  3.2.加载文件/文件夹模块

  可以通用提供文件/文件夹路径的方式加载非核心模块。

  var module1= require('/script/module1'); 按文件加载此处可省略文件扩展名.js
  var module = require('/script');

  按文件夹加载,node就会在指定文件夹下查找package.json文件,如果文件夹下不存在该文件,则默认寻找文件夹下index.js文件加载。存在则会解析该配置文件,找到main属性配置的文件路径加载。

  如果一个模块名未找到加载文件,node就会尝试在当前目录的node_modules文件夹下查找,如果还是没有找到会继续查找父级文件夹,知道最上级或找到为止。

  3.3.缓存模块

  模块在首次加载时会被缓存,如果模块名被解析为相同的模块,那么每次调用require(modulename)都会只返回同一模块,且初始化过程只会执行一次

  

  

  

  

nodejs基础部分(一)的更多相关文章

  1. [转]Nodejs基础中间件Connect

    Nodejs基础中间件Connect 从零开始nodejs系列文章,将介绍如何利Javascript做为服务端脚本,通过Nodejs框架web开发.Nodejs框架是基于V8的引擎,是目前速度最快的J ...

  2. Nodejs基础中间件

    Nodejs基础中间件Connect   http://www.tuicool.com/articles/emeuie 关于作者 张丹(Conan), 程序员Java,R,PHP,Javascript ...

  3. Nodejs第一天-{Nodejs基础 深刻理解浏览器 环境变量 基础语法}

    Nodejs第一天 1.什么是Nodejs ​ Nodejs是一个可以运行(解析)ECMAScript的环境; ​ ECMAScript是规定了一些列的语法 ,这些语法想要解析的执行就需要放在某个环境 ...

  4. nodejs 基础篇整合

    nodeJs 基础篇整合 最近有朋友也想学习nodeJs相关方面的知识,如果你是后端想接近前端,node作为一门跑在服务端的JS语言从这里入门再好不过了.如果你正好喜欢前端,想走的更高,走的更远.no ...

  5. 前端知识体系-NodeJS相关】NodeJS基础知识全面总结

    NodeJS基础知识 1. Node的全局对象和全局变量 1.1 全局对象:所有模块都可以调用的 global:表示Node所在的全局环境,类似于浏览器的window对象. process:该对象表示 ...

  6. Nodejs基础中间件Connect

    http://www.tuicool.com/articles/emeuie 关于作者 张丹(Conan), 程序员Java,R,PHP,Javascript weibo:@Conan_Z blog: ...

  7. 02 nodejs命令参数(NodeJS基础入门)

    声明:本文章可供有一定js基础的朋友参考nodejs入门,本文未讲解nodejs的安装,如有需要的同学可以加QQ3382260752找我,进行交流学习. 建议使用开发软件:webstorm或hbuil ...

  8. nodejs基础教程回顾01

    最近在复习nodejs,因为框架太多隔一段时间不用就会忘了,所以没办法必须时常拿出来练练,就像家里有好几辆车,要时不常的轮流开一圈.我就从最基础的开始写,怎么下载安装就不说了,首先是nodejs的三类 ...

  9. NodeJS基础总结(一)

    NodeJS官网网址:https://nodejs.org/en/ 使用require方法加载fs核心模块 var fs = require('fs'); 一.读取文件//   第一个参数就是尧读取的 ...

  10. NodeJS基础教程

    关于 本书致力于教会你如何用Node.js来开发应用,过程中会传授你所有所需的“高级”JavaScript知识.本书绝不是一本“Hello World”的教程. 状态 你正在阅读的已经是本书的最终版. ...

随机推荐

  1. Chromium Graphics: Multithreaded Rasterization

    Multithreaded Rasterization @nduca, @enne, @vangelis (and many others) Implementation status: crbug. ...

  2. 最大优先队列 A - 奇怪的玩意

    我们的化学生物学家发明了一种新的叫stripies非常神奇的生命.该stripies是透明的无定形变形虫似的生物,生活在果冻状的营养培养基平板菌落.大部分的时间stripies在移动.当他们两个碰撞, ...

  3. php八大设计模式之观察者模式

    例如在登录时,需要判断用户是第几次登录,登录过于频繁我们就给用户提示异常.根据用户的爱好,在用户登录后给予相应的猜你喜欢.如果都在 登录时判断密码的方法内完成,不符合面向对对象的单一职责.那我们该怎么 ...

  4. python -迭代器与生成器 以及 iterable(可迭代对象)、yield语句

    我刚开始学习编程没多久,对于很多知识还完全不知道,而有些知道的也是一知半解,我想把学习到的知识记录下来,一是弥补记忆力差的毛病,二也是为了待以后知识能进一步理解透彻时再回来做一个补充. 参考链接: 完 ...

  5. 一个Web报表项目的性能分析和优化实践(一):小试牛刀,统一显示SQL语句执行时间

    最近,在开发和优化一个报表型的Web项目,底层是Hibernate和MySQL. 当报表数据量大的时候,一个图表要花4秒以上的时间. 以下是我的分析和体会.  1.我首先需要知道哪些函数执行了多少时间 ...

  6. 移动App架构设计

    移动App架构设计 本文主要总结了几种经常使用的架构模式, 基本是层层递进的转载请注名出处 http://blog.csdn.net/uxyheaven, 良好的排版在https://github.c ...

  7. DOM基础及DOM操作HTML

     文件对象模型(Document Object Model.简称fr=aladdin" target="_blank">DOM).是W3C组织推荐的处理可扩展标 ...

  8. Linux下无需输入password自己主动登陆sshserver方法

    用OpenSSH在linux下登陆sshserver时.每次都提示要输入password,并且使用vim 的netrw插件编辑远程文件时每次改动后保存都要输password,很麻烦. 查看了netrw ...

  9. Java,泛型类型通配符和C#对照

    c#的泛型没有类型通配符,原因是.net的泛型是CLR支持的泛型,而Java的JVM并不支持泛型,仅仅是语法糖,在编译器编译的时候都转换成object类型 类型通配符在java中表示的是泛型类型的父类 ...

  10. Unix网络编程之环境搭建

    环境搭建 在尝试UNP书上的样例时,会由于找不到"unp.h"等问题无法编译成功.因此在学习之前须要先搭建好编译环境. 步骤 <1>下载  UNIX网络编程源码unpv ...