node 基础

86 阅读3分钟

简介

node.js 是一个JS的服务端 运行环境,基于V8,在 JS 语言规范的基础上,封装了一些服务端的 runtime, 让我们能够简单的实现非常多的业务功能。 -最早,高性能的 web服务器。

  • 后来,node.js演变成语言。
  • common.js 是一个规范,Node.js 是cjs的实现,这就是我们今天能手写 common.js 规范。

node 的历史

LAMP/ XAMP -linux/windows + Apache + MySQL + PHP(thinkPHP, CLI); -MEAN mongodb + express +angular + node.js 2014年比较火。

node 可以做什么?

我们平常也在用node, npm run start 的时候,就运行了。

  • 跨平台开发: PC, web, RN, weex 都在用node。
  • 后端开发 API, RPC;
  • 前端开发: 前端的工具链;
  • 工具开发: 脚本、脚手架、命令行;

在package.json 的script 里的命令,比如 test:"rollup -c -w"; 执行时,会去node_modules/bin里去找

node 分类举例

压缩 UglifyJS JSmain 依赖 npm, bower 模块 Commonjs css postcss 构建 gulp grunt webpack 模板 jade handlebars 跨端 electron tuari

node 的问题

  • 单线程很脆弱,可以通过 cluster/ pm2,去实现多核并发的负载均衡。
  • node 对MongoDB,mySQL, redis 支持, 对 neo4j, tigerGraph, arngoDB不太支持
  • 安全问题(不太存在所谓的安全问题,主要还是编写代码质量和生态的问题)

node 和浏览器的区别

  • node 环境中,没有dom, bom, 浏览器也没有 fs, path。如果浏览器中有 fs,别人在访问网站的时候,调用fs,拿到整个系统的权限,读取这些文件,安全问题很大。
  • 事件循环
  • cjsesm(这个问题现在不存在了)

node图.png

node的应用 与 npm

node 的安装

  • nvm 当前我需要多个版本的时候,可以通过 nvm切换。 num use 14 使用v14.x.x的 npm
  • nrm 对node 的镜像进行设置.
  • npm 包管理功能

npm 的目标

  • 给你的团队带来更好的开源库和依赖 gem -ruby pip -python maven -java (全局包管理) --- D://repository/org/java/apache/.... npm init -y 给默认选项, npm init 自己选择配置项,一般是回车回车再回车。 npm i loadsh 再package.json 的 dependencies: []显示,npm i loadsh -D 在 devDependencies显示。

npm i 的过程

npm i.png

npm 和 yarn 的区别(区别不大了)

  • npm 没到 v5时候,npm 没有package-lock.json yarn 有Lock这个文件,确保内容的确定性
  • 扁平化的安装,创建多个副本,现在npm 也有这种优化了
  • 网络, yarn快,yarn有请求排队的概念,理解成并发的连接池,有安装失败的处理机制。*
  • 缓存机制 npm config get cache yarn cache dir

npm 的包依赖关系 (在视频的1:10:00)

npm dedupe 帮我们整理包的依赖关系

dependencies

dependencies 项目依赖

npm i -S lodash debounce / throttle

dependencies 开发依赖

npm i -D webpack rollup jest

dependencies 同版本依赖

eg: vue 组件库 我们写了一个Vue的组件库,需要把Vue 的源码打包进这个组件库里吗? 很明显,一般是不用的。别人在使用这个Vue组件库, 应该自己安装Vue源码。 我们不希望核心库被重复下载: 安装这个库之前, 核心库必须要被安装。

dependencies 捆绑依赖 (基本不用,npm pack 产生压缩包)
dependencies 可选依赖 (基本不用)

CommonJS 的模块化 (1:26:36)

.....