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了。