Node.js入门记(1):基本概念

Node.js和JavaScript:
核心都是ECMAScrit,比如数据类型,语法结构,内置对象等等。
然于js中顶层是window
于node中之不有这window(console.log(this)的结果是{}),它的顶层是大局对象(global),但是,当以node.js中定义一个a时。通过也global.a访问不了a。

javascript
包括ECMAScript、DOM和BOM

而node.js包括
ECMAScript、OS(操作系统)、file(文件)、net(网络)和database(数据库)。

前端用于运行浏览器,后者用来操作系统。
简单易行的说 Node.js 就是运行于服务端的 JavaScript。

  • Node.js 是一个根据Chrome JavaScript 运行时确立之一个平台。

  • Node.js是一个事件驱动I/O服务端JavaScript环境,基于Google的V8引擎,V8引擎执行Javascript的速度好急匆匆,性能好好。


第一段node.js程序

新建一个hello.js文件

console.log('hello nod.js!');

失去官网下充斥编译器安装包。安装了之后双击出现命令行
呢可以通过win+R打开cmd,输入node回车
图片 1
意味着安装没问题。退出:Ctrl+D或者Ctrl+C两涂鸦。
看本(没有上node.js时候):node -v
图片 2
今昔许之前的hello.js文件,node 路径文件称即可、
图片 3
路比较累的言语,可以如下操作
图片 4
如此这般就是可由此相对路径进行走访

webstorm环境下下node.js

以下通过webstorm来操作node.js
开辟一个空文件夹以创项目
以settings里面添加
图片 5
加载node.js的npm
点规定。就可右键run运行node.js了。

模块的施用

var a=100
本条a是属于模块的,不是全局变量。一个文书就是一个模块。每个模块都发出温馨的作用域。
咱运用var 声明的一个变量,他并无就是大局的,而是属于即模块。
君想声明一个全局变量,必须global.a=200
每个文件还发一个异样之__filename属性

//__filename:当前文件被解析之后的绝对路径(双下划线)

console.log(__filename);

模块加载

以javascript的修道下引入其它js是由此<script>一经以目前,用的凡:
于1.js之同一个目下新建一个2.js
写入

console.log('这是模块2.js')

保存
然后回1.js输入reruire('./2.js')
ctrl+shift+F10.发觉模块2.js之内容让打印出了。
图片 6

模块的加载机制

require(‘模片路径’)

  • 模块路径问题:可以形容相对,也足以形容绝对。相对路径同目录下要抬高../假使一直写,加载的是node.js中之骨干模块。或者是node_modules
  • 卿可以描绘require(../2),可以查找到,首先以模块文件名称进行经找。如果没找到,会在模块名称后增长.js晚缀进行搜。
  • 要还未查看找到,则会找.json后缀
  • 再次寻找不交就是寻找.node后缀,还没有底语句更弹有荒唐。

module和exports

什么样调用其它模块内的变量?
在2.js中写入var a=100,在1.js蒙怀念要为此到2.js遇的a,不可知以require
2.js后,直接console.log(a)!!——然而你得:
如果模块能访问另一个模块中之变量。可以:

  • 管变量作为global对象属性(global.a=100)——不推荐者做法。(全局污染)
  • 使模块接口:
    module——保存及脚下模块有关的音信。module下有一个子对象:exports对象。可以经她将一个模块的组成部分变量输出到别的模块中。
    每当2.js文件写入:

    var a=100;
    module.exports.a=a;
    

    而1.js这样写:

    var m=require('./2');//返回值其实就是被加载模块中的module.exports
    console.log(m);
    

    回来的凡{a:100}.也就是说,require(‘./2’)返回的凡有在模块2遭遇为定义之价的集聚。在模块作用域,还有放的模块对象exports——其实就算是module.exports

    var a=100;
    module.exports.a=a;
    console.log(module.exports===exports)//返回true
    

    留神不要毁引用关系,如果2.js这样写:

    var a=100;
    module.exports.a=a;
    module.exports=[1,2,3];
    

    1.js引入2.js继,就寻找不顶a了。