没检测的node

395 阅读5分钟

node 第一天

  1. 什么是node,就是个工具
    1. 基于v8引擎(谷歌)渲染js的工具或者环境
      1. 安装node
      2. 把js代码放到node里运行
  2. 安装=>官网
    1. 安装以后.电脑自动安装了npm(node package manage)节点包管理工具: 一个js模块管理工具,基于npm 可以安装下载js模块
    2. 形成以node命令,可以在DOS窗口或者命令行执行: node xxx.js
      1. 8以下不支持es6
      2. npm和node是两个东西,一个是安装的,一个是js包管理的
  3. node中渲染和解析js
    1. npm都是基于node的io读写完成的
    2. node是执行js的
    3. npm是安装封装好的js的
  4. 如何在node中执行js
  5. REPL模式 read(读)=>evalute(求值))=>print(输出)=>loop(循环)
  6. 直接基于node来执行js文件
  7. 使用:
  8. 直接cmd里面 node回车 就可以是使用let a = 1;
  9. node xxx.js 运行js文件

node第二天

  1. node可以放在服务器上
  2. 然后代码放到服务器上执行(可以实现js可以是后台语言)
  3. node是单线程,因为他是js写的
    1. java/php都是多线程
  4. 异步无阻塞i/o操作(input/output) 对文件的读写
    1. 读取文件是异步
  5. event-driver类似于发布订阅或者回调函数
    1. 其实就是xx.onclick =function 就是触发的时候执行某个函数
  6. http/fs/url/path等专属对象
  7. js作为前端语言有i/o操作,只有input 的type为file,可以读取代码,实际是限制io操作
    1. node中运行js是不限制io操作,因为node

npm使用

npm install/uninstall xx@1.1 版本控制 全局 -g package.json 就是npm安装的项目依赖清单 npm init -y 是自动生成一个package.json清单 不-y就是逐行自己配置 webpack是最终打包,把所有的依赖(js文件)都合成一个文件 npm install --save 保存到开发依赖 npm install --save-dev 保存到生产依赖 dependencies 发布环境 devDependencies 开发环境 main: 主要入口文件,也就是开始项目启动文件

安装全局和本地命令和自定义命令

npm root / npm root -g 查找版本存储路径和全局版本存储路径

  • 安装全局
    • 容易造成版本重复及覆盖
    • 不能基于CommonJs模块规范调用
    • 安装在全局目录下的模块,大部分会生成一个xxx.cmd文件,只要有这个文件,那么xxx就是一个可执行命令
  • 安装本地
    • 项目单独使用

可执行命令脚本 cmd文件

  1. npm root -g找出全局命令所在
  2. 在npm页面找到有cmd文件,复制内容并且改写为打开node_modules的tkf的index.js路径
  3. 输入tkf命令行就会执行index.js


@IF EXIST "%dp0%\node.exe" (
 "%~dp0\node.exe" "%~dp0\node_modules\tkf\index.js"
 %*) ELSE (
  @SETLOCAL
  @SET PATHEXT=%PATHEXT:;.JS;=;%
	node "%~dp0\node_modules\tkf\index.js"
 %*
)


可执行脚本

  1. 把模块安装在本地,如果是支持命令操作的(会在node_modules的bin中生成xxx.cmd的命令文件,只不过这个文件无法在全局下执行 =>不能直接用命令(全局))
  2. 在package.json的scripts中配置需要执行的命令脚本 "script" : { "tkf": 'lessc -v' 属性名自己设置,属性值是需要执行的命令脚本,需要自己编写(可以自己配置命令) }
  3. npm run tkf / yarn tkf 这样的操作就是把配置的脚本执行
    1. 首先到配置清单的scripts里面查找
    2. 然后执行对应的属性值的脚本执行
    3. 执行脚本的时候,会到本地node_modules中的bin文件中查找,没有的话,向npm安装的全局目录下查找

node基础

NODE本身是基于commonjs设计的,所以模块是node的组成

  • 内置模块: NODe天生提供给js调取使用的
  • 三方模块: 别人做好的,基于npm使用,下载
  • 自定义模块: 自己创建一些模块

Commons 模块化设计思想

AMD/CMD/ES6/MODULE都是模块化思想

  1. CommonJs规定,每个js都是一个单独的模块(模块是私有的,里面涉及到的值和变量及函数都是私有的,和其他js文件都是不冲突的
  2. CommonJs允许模块中的方法互相调用 [导出] CommonJs给每个模块都设置了一个内置的变量/属性/方法 modules: 代表当前这个模块对象(还有很多其他属性) modules.exports: 模块的这个'属性',用来导出的 exports: 是内置的一个'变量',也是用来导出当前模块属性和方法的.(module.exports和exports不是同一个东西,但是他俩的值是一样的,默认指向同一个堆内存地址)

[导入] require是CommonJ的内置变量用来导入模块的,其实导入的就是module.exports导出的东西,其实也是一个对象

CommonJs模块的特点如下
  1. 所有代码都运行在模块作用域,不会污染全局作用域
  2. 模块可以多次加载,但是只会在第一次加载时运行一次,运行结果就会缓存.以后加载都是加载缓存结果,要想再加载,需要清除缓存
  3. 模块加载的书序,按照其在代码中出现的顺序,CommonJs模块加载模块是同步的,也就是说,只有加载完成,才能执行后面的操作
  4. 就是单例模式
  5. require导入的是module.exports,如果单独更改exports会有报错
    1. 最好就是直接使用exports,不要用新对象
let  a = {
	var a = 1;
	function fn(val){
	}
}
let b = {
	var a = 1;
	function fn2(){
		a.fn(111)
	}
}
总结:对象里面包裹参数,作用域单独使用