Node.js基础

目录

什么是Node.js

Node.js特性

浏览器环境与node环境 

Node.js与浏览器的差别

CommonJS规范

CommonJS的modules模块化规范写法

暴露文件内容

暴露文件(函数) 

导入文件(函数)

暴露文件(对象)

导入文件(对象) 

Node.js命令

npm

命令 

注意:

关于package.json

全局安装nrm

中国NPM镜像

yarn

对比npm的优点

ES模块化

使用前

导入与导出模块 

导出模块

导入模块

导出多个模块

导入多个模块

多个import导入

模块在浏览器上的加载

导入js文件

导入css文件

什么是Node.js

Node.js是一个javascript运行环境。他让javascript可以开发后端程序,实现几乎其他后端语言实现的所有功能。

Node.js是基于V8引擎,V8是谷歌发布的开源javascript引擎,本身就是用于Chrome浏览器的js解释部分,但是Ryan Dahl将这个V8搬到服务器上,用于做服务器的软件,因此Node.js可以解析js代码

Node.js特性

  • Node.js语法完全是js语法,只要你懂js基础就可以学会Node.js后端开发
  • Node.js超强的高并发能力,实现高性能服务器
  • 开发周期短,开发成本低,学习成本低

浏览器环境与node环境 

Node.js基础_第1张图片

注意:Blink内核能够对于HTML/CSS中的DOM进行排版解析,确定每一个元素的位置

Node.js与浏览器的差别

  • 浏览器是js的前端运行环境,其支持html和css
  • Node.js是js的后端运行环境,不支持html和css
  • Node.js无法调用DOM和BOM等浏览器内置API
  • Node.js中间层提供很多系统级别API(内置模块)如:文件的读写(File System)、进程管理(Process)、网络通信(HTTP/HTTPS)这些功能是浏览器所不具备的
  • Node.js没有浏览器的安全级别的限制,使用起来轻松自由
  • Node.js同时支持CommonJS和ES模块化系统,而浏览器中,我们才开始看到ES模块正在实现

CommonJS规范

Node.js基础_第2张图片

CommonJS的modules模块化规范写法

我们可以把公共的功能抽离成一个单独的js文件作为一个模块,默认情况下面这个模块里的方法或属性外面是没法访问的(针对require方法,不针对script标签)。如果要让外部可以访问模块里的方法或者属性,就必须在模块里通过exports或modlue.exports暴露属性或者方法

暴露文件内容

暴露:module.exports=test

将test方法直接暴露出去

注意:这种方式只能暴露a.js的一个方法,如果暴露多个的话,后面方法的会将前面的方法覆盖

暴露a.js文件的多个方法

暴露:module.exports={test:test,run:run}或简写:module.exports={test,run}

注意:后面是对象形式,暴露test,run方法

暴露:(第二种写法)

export.test=test

expoet.run=run

注意:这里的暴露第一个为导入的值可以随意写名称,第二个为导出的值不可以随意写名称

暴露文件(函数) 

//a.js内
function test(){
    console.log("test-aa");
}

function run(){
    console.log("我要飞的更高");
}

module.exports={test,run}

导入文件(函数)

导入:var a=require("./a")

导入a.js文件

//导入a.js文件
var a=require("./a")
console.log(a);//{ test: [Function: test], run: [Function: run] }
a.run()//我要飞的更高

暴露文件(对象)

// add.js文件内
const add={
    msg:"hello add"
}
module.exports={addChange: add}

导入文件(对象) 

var get=require("./add.js")
console.log(get.addChange.msg);

注意:

  • 导入文件的前提是暴露文件
  • 哪里需要用该文件在哪里导入该文件
  • 导入的文件里包含暴露的多个模块
  • 对于此种导入方式,导入后的名称可以随意写(导入导出对象同样适用)

Node.js命令

查看node.js版本:node -v

执行js文件:node .\文件名

退出当前命令:ctrl+c

npm

含义:node.js的包管理器,用于node插件管理包括安装、下载、管理依赖(package.json)

命令 

Node.js基础_第3张图片

npm uninstall 包名  (卸载对应模块) 

注意:

  • node项目里面会用到的模块:node内置模块、第三方模块、自己写的模块
  • npm init可以快速构建node.js工程,同时会生成package.json文件
  • node.js里面安装的模块会直接放入node_modules中
  • 将记录好对应依赖的package.json文件放到一个空项目中然后在此文件中执行npm install就可以在此文件中下载对应的依赖

关于package.json

  1. package.json是一个json串以key:value形式展现,并且key和value都以字符串的形式展现
  2. package.json文件里面既可以帮助自己记录自己包的信息,还能记录你下载安装别人包的信息
  3. package.json内的scripts里面的value为脚本代码json串,里面可以自定义脚本,只需要运行npm run 脚本json的key值就可以执行脚本json对应的value代码
  4. package.json的dependencies为当前所下载的依赖,这些下载的依赖都放入node_modules中

全局安装nrm

NRM(npm registry manager)是npm的镜像源管理工具,有时候国外资源太慢,使用这个可以快速的在npm源之间切换

手动切换方法:npm config set registry https://registry.npm.taobao.org

查看镜像源:npm config get registry

安装nrm:npm install -g nrm

查看版本:nrm -V

使用nrm:nrm ls查看可选源,其中带*的是当前使用的源

切换nrm:若切换到淘宝——nrm use taobao(taobao为源)

测试速度:nrm test

中国NPM镜像

这是个完整的npm.js,org镜像,你可以用此代替官方版本,同步频率为10分种一次以保证尽量与官方服务同步

npm install -g cnpm --registry=https://registry.npmmirror.com

yarn

安装yarn:npm install -g yarn

注意:先用npm来安装下来,然后再取代npm(npm泪奔)

对比npm的优点

  1. 速度超快:yarn缓存了每个下载过的包,所以再次使用时无需重复下载。同时利用并行下载以最大化资源利用率,因此安装速度超快
  2. 超级安全:在执行代码之前,yarn会通过算法校检每个安装包的完整性

Node.js基础_第4张图片

ES模块化

使用前

项目内执行:npm init

package.json内添加属性:"type": "module"

导入与导出模块 

导出模块

//module.js文件内
const moduleA={
    //模块A
}
export default moduleA//默认导出

导入模块

import moduleA from "./module/module.js";//导入modeleA
console.log(moduleA)

注意:default导出方式只能导出一个模块,通过这种导出方式,那么导入的名字可以随意写(对于导入/导出函数同样适用)

导出多个模块

//module.js文件内
const moduleA={
    //moduleA模块
}
const moduleB={
    //moduleB模块
}
export {moduleA,moduleB}//导出想要导出的模块

导入多个模块

import {moduleA,moduleB} from "./module/module.js";//导入modeleA
console.log(moduleA)
console.log(moduleB);

注意:以{}形式导出可以导出多个模块也可以导出一个模块,但是不管导入多少模块都需要加{}进行导入,并且导出和导入的名字必须一样(对于导入/导出函数同样适用)

多个import导入

//test1.js文件内
console.log("test1");
//test2.js文件内
console.log("test2");
//test3.js文件内
import "./test1.js"
console.log("test3");
import "./test2.js"

执行:node .\test3.js

注意: 

  1. 这里import导入方式仅仅是为了import文件里的内容能够在在被导入的新文件中运行
  2. 由上面的结果发现,import文件导入依照导入顺序执行,哪个文件先被导入,则哪个文件先执行,但import导入的文件会被提前声明到该文件的最上方,先于该文件内的js代码执行

模块在浏览器上的加载

导入js文件

//add.js内
const add=(x,y)=>{
    return x+y
}
export default add


导入css文件

/* style.css文件内 */
p{
    color: blue;
}
/* pattern.css文件内 */
p{
    text-align: center;
}
// add.js文件内
//这里的assert{ type: "css"}用于提示js引擎导入的是css文件
import styles from "./style.css" assert{ type: "css"}
import patterns from "./pattern.css" assert{ type: "css"}
//应用css到文档中
document.adoptedStyleSheets=[styles,patterns];



    
    主页面


    

我是一段话

注意:

  • 这里不能通过file协议来进行访问(跨域),必须在本地搭建http server环境
  • 这里面通过js来导入css文件也可以在html文件内的script标签内通过import关键字来导入,不过该js文件需要先导出

解决:线上去拉一个http server

命令:npx http-server

npx可以实现,当我们某一个模块不存在的时候,它可以从互联网上安装一个模块,如今我们安装http server模块

Node.js基础_第5张图片

访问:http://localhost:8080/

当然,你也可以直接安装live server插件直接文件内右键open with live server更方便

你可能感兴趣的:(Node.js,node.js,javascript)