Node学习(一)安装与卸载


温馨提示: 通过nvm安装,若之前安装过node.js,得把之前安装过的node.js卸载掉

一、Node安装与卸载

1.1安装

(一)直接安装

直接到官网下载即可

(二)nvm方式安装

nvm :node.js版本管理工具

Windows 操作系统的 nvm 下载地址:.
2.1第一步: 点击下载在这里插入图片描述
2.2第二步: 解压后点击安装
2.3第三步: 自己在文件里创建个dev文件夹【目的:方便查找】,入下图安装
在这里插入图片描述
2.4第四步: node.js(镜像文件)、建立安装到dev里面,便于查找
在这里插入图片描述
2.5第五步: 查看是否成功状态
在这里插入图片描述
2.6第六步: 配置文件–打开刚刚的dev文件【若没有nodejs文件夹,请自行创建即可】
在这里插入图片描述

2.7第七步: 修改dev/nvm下的 settings.txt 文件

  • root:nvm的安装位置(自动生成)
  • path:指定的 nodejs 的快捷目录(自动生成)
  • node_mirror:设置 下载 node 时的镜像
  • npm_mirror:设置 下载 npm 时的镜像
    例如:
root: E:\tools\dev\nvm
path: E:\tools\dev\nodejs
node_mirror: http://npm.taobao.org/mirrors/node/
npm_mirror: https://npm.taobao.org/mirrors/npm/

③输入nvm install 15开始安装:
④nvm use 15 // 使用指定版本
注意: 安装版本过高,可能会出问题

若出现无法安装到nodejs中,则直接安装到根目录下,配置环境变量即可。
nvm设置使用的node版本出错时,可尝试使用以管理员运行命令提示符进行设置

在这里插入图片描述

(三)nvm常用命令
  • nvm install :node 安装指令
    • nvm install 0.0.1 :指定安装的版本
      • nvm install 9 :指定大版本,会安装这个大版本的最新版本
    • nvm install latest : 安装最新版本
  • nvm list :查看本地已安装的node版本
  • nvm use
    • nvm use 0.0.1 :启用已安装的版本
    • uninstall 版本:卸载
(四)cnpm下载
npm install -g cnpm --registry=https://registry.npm.taobao.org

1.2卸载

(一)在控制面板-程序-程序和功能中卸载

确保node.js没有在后台运行的情况下,进行卸载,可做重启操作后,在到控制面板中找到node.js进行卸载

(二)卸载后 到文件夹中进行进一步的删除

C:\Program Files (x86)\Nodejs
C:\Program Files\Nodejs
C:\Users\xxx\AppData\Roaming\npm
C:\Users\xxx\AppData\Roaming\npm-cache
删除上述的几个文件夹 Administrator是我的用户名 每个人可能不一样

(三)检查环境变量中Path中有没有[有就删]
(四)最后 重启一下电脑

二、commonjs规范

2.1、commonjs

map:

- [commonjs模块化规范特点](#commonjs模块化规范特点)
- [module对象](#module对象)
- [module.exports](#module.exports)
- [exports变量](#exports变量)
- [require](#require)
- [commonjs的模块加载机制]

2.2、common.js模块化规范特点

(一)所有代码都运行在模块作用域,不会污染全局作用域(每个文件就是一个模块,有自己的作用域,在一个文件里面定义的变量、函数、类都是私有的,对其他文件不可见)
(二)模块可以多次加载,但是只会在第一次加载时运行一次,然后运行结果就被缓存了,以后再加载,就直接读取缓存结果,要想让模块再次运行,必须清除缓存;
(三)模块加载的顺序,按照其在代码中出现的顺序;

2.3、module对象

Node内部提供一个 Module 构建函数。所有模块都是 Module 的实例。

每个模块内部,都有一个module对象,代表当前模块。它有以下属性。

  • module.id 模块的识别符,通常是带有绝对路径的模块文件名。
  • module.filename 模块的文件名,带有绝对路径。
  • module.loaded 返回一个布尔值,表示模块是否已经完成加载。
  • module.parent 返回一个对象,表示调用该模块的模块。
  • module.children 返回一个数组,表示该模块要用到的其他模块。
  • module.exports 表示模块对外输出的值。

通过 exportsmodule.exports 向外暴露成员。

2.4、module.exports

module.exports 属性表示当前模块对外输出的接口,其他文件加载该模块,实际上就是读取 module.exports 变量。

// 导出  test1.js
module.exports = 123
// 导入
let a = require('./test1')
console.log('a -->', a);    // 123

2.5、exports变量

// 导出  test1.js	
module.exports = 123

// 导入
let a = require('./test1')
console.log('a -->', a);    // 123

为了方便,Node为每个模块提供一个exports变量,指向module.exports。

// 导出  test1.js
exports.xxx = 'hello'

// 导入
let a = require('./test1')
console.log( a.xxx )    // hello

// 导出  test1.js
let ee = {
    fn: function(){
        console.log('err')
    }
};
exports.xxx = ee
// 导入
let rr = require('./test1')
console.log(rr)             // {xxx: {fn: function(){}}}
console.log(rr.xxx.fn())    // 'err'

2.6、案例理解

正常情况下:

//导出:
let n =123;
function fn(){
   
    console.log(666)
}
let obj = {
   
    name: 'hello',
    age: 18,
    fn(){
   
        console.log(888);
        return 'ok'
    }
}
module.exports.fn = fn;
module.exports.num = n;
module.exports.obj = obj;

function init(){
   
    console.log(1123);
}
exports.init = init;
//导入
let fn = require('./module.js');
console.log('fn----->',fn);

结果
在这里插入图片描述
非正常情况下:

//导出
let n =123;
function fn(){
   
    console.log(666)
}
let obj = {
   
    name: 'hello',
    age: 18,
    fn(){
   
        console.log(888);
        return 'ok'
    }
}
module.exports.fn = fn;
module.exports.num = n;
module.exports.obj = obj;

function init(){
   
    console.log(1123);
}
exports.init = init;

//直接给module赋值的话,就相当于切断了指向obj的线,将会直接把值暴露出来
module.exports = init;
console.log('exports---->',typeof(exports));
//导入
let fn = require('./module.js');
console.log('fn----->',fn);

结果:
在这里插入图片描述
因此,总结如下:
在这里插入图片描述

2.7、require

Node 使用 CommonJS 模块规范,内置的 require 命令用于加载模块文件。

require命令的基本功能是,读入并执行一个 JavaScript 文件,然后返回该模块的 module.exports 对象。如果没有发现指定模块,会报错。

require 参数的几种情况

  1. require(‘./xxx’) : 加载本地模块
  2. require(‘/xxx/yyy/zzz/aaa’) : 加载绝对路径的模块
  3. require(‘xxx’) : 加载官方模块 或 第三方包
弊端
let fn =() => {
   
    console.log(666);
}

let fn1 =() => {
   
    console.log(6661);
}

module.exports = fn1;
module.exports = fn;
let fn = require('./module.js');

console.log('fn----->',fn);

结果只会是一个函数
在这里插入图片描述

三、Path

3.1目录、文件、扩展名

console.log(path.dirname('/foo/bare/styd/query'));//返回当前/foo/bare/styd

console.log(path.basename('/foo/bare/styd/query'));//得到query

console.log(path.extname('aaaa/bbbb/cccc/dddd/index.html'));//得到.html

3.2路径规范化和解析、拼接

  • path.normalize(path) :规范化路径
  • path.resolve([…path]) :将路径或路径片段的序列解析为 绝对路径 如果没有传入 path 片段,则 path.resolve() 将返回当前工作目录的绝对路径
  • path.join([…path]) :使用平台特定的分隔符作为定界符将所有给定的 path 片段连接在一起,然后规范化生成的路径
  • path.parse(path) :返回一个对象,其属性表示 path 的重要元素。 尾部的目录分隔符将被忽略
  • path.format(path) :从对象返回路径字符串。 与 path.parse() 相反。
    • 如果提供了 pathObject.dir,则忽略 pathObject.root
    • 如果 pathObject.base 存在,则忽略 pathObject.extpathObject.name
  /* {
    root: '/',
    dir: '/foo/bare/styd',
    base: 'query.txt',
    ext: '.txt',
    name: 'query'
  } */
  console.log(path.parse('/foo/bare/styd/query.txt'));//返回上述一个对象
  let pp = {
   
      root: '/',
      dir: '/foo/bare/styd',
      base: 'query.txt',
      ext: '.txt',
      name: 'query'
  }
  console.log("format==",path.format(pp));//format== /foo/bare/styd\query.txt

  console.log(path.relative('aaa','bbb','ccc'));//..\bbb

  console.log(path.resolve('/aaa','bar','bb/ffb','ccc','..'));//D:\aaa\bar\bb\ffb

 console.log(path.join
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

java亮小白1997

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值