• 【NodeJs-5天学习】第一天篇② —— 安装NodeJs环境以及VsCode开发工具


    面向读者群体

    • ❤️ 电子物联网专业同学,想针对硬件功能构造简单的服务器,不需要学习专业的服务器开发知识 ❤️
    • ❤️ 业余爱好物联网开发者,有简单技术基础,想针对硬件功能构造简单的服务器❤️

    技术要求

    • HTMLCSSJavaScript基础更好,当然也没事,就直接运行实例代码学习

    专栏介绍

    • 通过简短5天时间的渐进式学习NodeJs,可以了解到基本的服务开发概念,同时可以学习到npm、内置核心API(FS文件系统操作、HTTP服务器、Express框架等等),最终能够完成基本的web开发,而且能够部署到公网访问。

    学习交流群

    • NodeJs物联网五天入门学习之旅(搜索:729040020

    🙏 此博客均由博主单独编写,不存在任何商业团队运营,如发现错误,请留言轰炸哦!及时修正!感谢支持!🎉 欢迎关注 🔎点赞 👍收藏 ⭐️留言📝

    1、Node.js环境安装

    在上一讲中我们知道

    Node.js 是一个基于Chrome V8引擎的JavaScript运行环境

    那么,我们首先把这个运行环境安装起来,步骤也非常简单。

    1.1 下载安装文件

    点击 下载链接

    在这里插入图片描述

    建议下载长期支持版本
    msi是什么文件?它的意思就是MicroSoft installer(微软安装器)。大多数我们安装软件,是exe格式的可执行文件,那exe和msi有什么区别?

    • MSI更全面,更自动化,比如,自动注册到系统注册表,可以管理软件的安装,卸载,更新等。
    • EXE更灵活,配置性更强,不过这个是需要开发者做一些额外的工作。

    这里window系统我们就下载msi版本。

    1.2 安装步骤

    找到我们下载的文件,直接双击它。
    在这里插入图片描述
    点击next 下一步
    在这里插入图片描述
    勾选,我接受许可协议(使用人家的东西,就得接受人家的许可声明)
    点击next,下一步
    在这里插入图片描述
    安装路径,我的是默认在c盘的Program Files的nodejs目录下。平时我们安装软件,应该也看到过这Program Files,它表示的是,64位软件的默认安装目录。Program Files(x86)表示32位软件的安装默认路径。如果我们想换个目录,点击Change(改变),修改安装路径。这里我们不做多余的操作,默认安装路径。点击下一步
    在这里插入图片描述
    我们可以在这个步骤里,Nodejs安装哪些东西。

    • Node.js runtime 运行环境
    • npm package manager(非常重要,npm包管理

    这是Nodejs默认的包管理工具,它有什么作用呢?
    我们知道,windows操作系统,需要安装一个软件的话,要去百度查找,然后进入网站,下载,安装。
    手机上我们要安装某一个app,也要到app应用商城查找,然后下载安装。
    那这里引申出一个软件知识,所有的软件包,都放到一个地方,然后使用专门的工具,去这里下载。
    所以,ndoejs安装一些软件包(第三方库),使用的就是npm

    点击Next下一步
    在这里插入图片描述
    点击Next下一步
    在这里插入图片描述
    点击Install,稍微等待一下
    在这里插入图片描述
    在这里插入图片描述
    安装完成。cmd串口看看版本是否正确。输入node -v
    在这里插入图片描述

    打印nodejs的版本 V16.15.1 ,表示安装成功。

    同时,我们也打开安装目录看看有什么文件
    在这里插入图片描述

    npm表示我们的包管理,这是一个非常应用广泛的工具。
    node_modules表示我们包下载缓存的地方(后面我们会根据项目需求来下载对应的包)

    1.3 常规配置,主要是NPM

    安装完NodeJs环境之后,我们可以做一些常规配置工作,特别是了解npm 工具。
    在这里插入图片描述

    1.3.1 查看配置

    window cmd(win+R运行cmd进入命令提示符窗口)输入

    npm config ls -ls

    在这里插入图片描述

    1.3.2 配置国内下载镜像

    有时候,我们会发现,npm下载安装包的时候,速度异常缓慢!
    直接看配置,找到:

    • 原始配置
      在这里插入图片描述
      这个网址在国外,下载速度会受限。那么,怎么解决呢?
      直接使用国内大公司提供的镜像。
      使用淘宝的npm镜像地址
    • https://registry.npm.taobao.org
      在这里插入图片描述
      但是,一般我们不会直接设置,需要能够支持切换两个仓库(官方仓库、国内仓库)。

    NPM仓库:

    一般情况下,我们会用npmcnpm命令来区分官方仓库和国内仓库。

    • 当我们用npm命令时,表示从官方仓库下载包
    • 当我们用cnpm命令时,表示从国内仓库下载包。(国内仓库每10分钟从官方仓库同步包过来,基本上可以理解为一样)
      这两者除了名字不一样,命令参数都是一样。主要是区分仓库。

    npm命令是安装NodeJs环境的时候就已经自带了,那么我们只需要配置一下cnpm即可。

    执行命令

    • npm install -g cnpm --registry=https://registry.npm.taobao.org
      在这里插入图片描述

    这样就可以根据自己的需要来切换npm或者cnpm命令。

    1.3.3 尝试下载安装包

    后期我们会经常和express包打交道,这里下载一下:

    cmd(win+R运行cmd进入命令提示符窗口)输入 npm install express -g

    • 这个包用于构造web服务器相关请求,非常有用
      在这里插入图片描述
      那我们这个包会下载到什么地方?可以查看一下配置信息
      cmd(win+R运行cmd进入命令提示符窗口)输入 npm config ls -ls
    • 找到 globalconfig
      在这里插入图片描述

    1.4 NPM 使用介绍

    在开发NodeJs服务中,我们经常性会和NPM工具打交道,并且会从NPM仓库去下载很多有用的第三方包(基于内置API基础上封装出来的代码),协助我们完成项目开发。那么我们就必须先了解一些基本命令。

    建议大伙都输入一下命令查看一下效果

    1.4.1 查看当前npm版本 —— npm -v、npm --version、npm -version

    在这里插入图片描述

    1.4.2 查看模块安装信息
    1.4.2.1 查看所有全局安装的模块 —— npm list -g

    npm list -g

    在这里插入图片描述
    注意:

    • 区分一下全局安装本地项目安装的区别
      全局安装指的是所有NodeJs项目都能复用,不需要每次调用安装命令;
      本地项目安装指的是特定NodeJs项目能用,其他项目要用只能再次安装。
      简而言之就是包的使用范围。
    1.4.2.2 查看某个模块的版本号 —— npm list 模块名

    npm list 模块名

    比如:我们使用 npm 命令查看常用的 Node.js web框架模块 express:

    npm list express

    在这里插入图片描述

    1.4.3 查看npm配置 —— npm config ls -ls

    npm config ls -ls

    在这里插入图片描述
    一般我们更多的是关注npm仓库的配置信息。

    1.4.4 使用 npm 命令安装模块 —— npm install / i

    npm 安装 Node.js 模块语法格式如下:

    npm install/i

    比如:我们使用 npm 命令安装常用的 Node.js web框架模块 express:

    npm install express 或者 npm i express

    通过以上命令安装好之后,express 包就放在了工程目录下的 node_modules 目录中,因此在代码中只需要通过 require('express') (相当于我们c语言中的include)的方式引入就好,无需指定第三方包路径。

    但是上面方式仅仅是某一个项目工程有效,如果其他工程要用,那么又得继续重新安装一遍。所以,npm为了解决这种问题,区分了本地项目安装全局安装

    1.4.4.1 本地项目安装 —— npm install 模块名

    npm install

    比如:我们使用 npm 命令安装常用的 Node.js web框架模块 express:

    npm install express

    在这里插入图片描述
    这里会提示我们没有 package.json,这个文件是我们创建NodeJs项目是自动生成的,后面会讲解。

    对于本地安装,需要注意:

    • 将安装包放在 ./node_modules 下(运行 npm 命令时所在的目录),如果没有 node_modules 目录,会在当前执行 npm 命令的目录下生成 node_modules 目录。
      在这里插入图片描述
    • 可以通过 require() 来引入本地安装的包。
      在这里插入图片描述
    1.4.4.2 全局安装 —— npm install 模块名 -g

    npm install -g

    • g表示global

    比如:我们使用 npm 命令安装常用的 Node.js web框架模块 express:

    npm install express -g

    在这里插入图片描述
    对于本地安装,需要注意:

    • 将安装包放在你 node 的安装目录。
    • 可以通过 require() 来引入本地安装的包。
    1.4.4.3 下载当前项目所依赖的包(******** 非常重要) —— npm install

    假设我们是从网上下载别人的NodeJs项目,一般你会发现基本上是没有 node_modules 目录(一考虑项目大小,二考虑版本更新),这时候我们需要根据项目本身的 package.json 来安装整个项目的依赖包。

    package.json 位于模块的目录下,用于定义包的属性,并且依赖于它最终生成一个 package-lock.json文件。这里博主以一个demo为例:

    package.json文件:

    {
      "name": "hellodemo",
      "version": "1.0.0",
      "description": "",
      "main": "index.js",
      "scripts": {
        "test": "echo \"Error: no test specified\" && exit 1"
      },
      "author": "",
      "license": "ISC",
      "dependencies": {
        "express": "^4.18.1"
      }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    package-lock.json文件(不需要查看,了解即可):

    {
      "name": "hellodemo",
      "version": "1.0.0",
      "lockfileVersion": 1,
      "requires": true,
      "dependencies": {
        "accepts": {
          "version": "1.3.8",
          "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz",
          "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==",
          "requires": {
            "mime-types": "~2.1.34",
            "negotiator": "0.6.3"
          }
        },
        "array-flatten": {
          "version": "1.1.1",
          "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
          "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg=="
        },
        "body-parser": {
          "version": "1.20.0",
          "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz",
          "integrity": "sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==",
          "requires": {
            "bytes": "3.1.2",
            "content-type": "~1.0.4",
            "debug": "2.6.9",
            "depd": "2.0.0",
            "destroy": "1.2.0",
            "http-errors": "2.0.0",
            "iconv-lite": "0.4.24",
            "on-finished": "2.4.1",
            "qs": "6.10.3",
            "raw-body": "2.5.1",
            "type-is": "~1.6.18",
            "unpipe": "1.0.0"
          }
        },
        "bytes": {
          "version": "3.1.2",
          "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
          "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg=="
        },
        "call-bind": {
          "version": "1.0.2",
          "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
          "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
          "requires": {
            "function-bind": "^1.1.1",
            "get-intrinsic": "^1.0.2"
          }
        },
        "content-disposition": {
          "version": "0.5.4",
          "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz",
          "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==",
          "requires": {
            "safe-buffer": "5.2.1"
          }
        },
        "content-type": {
          "version": "1.0.4",
          "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
          "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA=="
        },
        "cookie": {
          "version": "0.5.0",
          "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz",
          "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw=="
        },
        "cookie-signature": {
          "version": "1.0.6",
          "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
          "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ=="
        },
        "debug": {
          "version": "2.6.9",
          "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
          "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
          "requires": {
            "ms": "2.0.0"
          }
        },
        "depd": {
          "version": "2.0.0",
          "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
          "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw=="
        },
        "destroy": {
          "version": "1.2.0",
          "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz",
          "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg=="
        },
        "ee-first": {
          "version": "1.1.1",
          "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
          "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow=="
        },
        "encodeurl": {
          "version": "1.0.2",
          "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
          "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w=="
        },
        "escape-html": {
          "version": "1.0.3",
          "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
          "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow=="
        },
        "etag": {
          "version": "1.8.1",
          "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
          "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg=="
        },
        "express": {
          "version": "4.18.1",
          "resolved": "https://registry.npmjs.org/express/-/express-4.18.1.tgz",
          "integrity": "sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q==",
          "requires": {
            "accepts": "~1.3.8",
            "array-flatten": "1.1.1",
            "body-parser": "1.20.0",
            "content-disposition": "0.5.4",
            "content-type": "~1.0.4",
            "cookie": "0.5.0",
            "cookie-signature": "1.0.6",
            "debug": "2.6.9",
            "depd": "2.0.0",
            "encodeurl": "~1.0.2",
            "escape-html": "~1.0.3",
            "etag": "~1.8.1",
            "finalhandler": "1.2.0",
            "fresh": "0.5.2",
            "http-errors": "2.0.0",
            "merge-descriptors": "1.0.1",
            "methods": "~1.1.2",
            "on-finished": "2.4.1",
            "parseurl": "~1.3.3",
            "path-to-regexp": "0.1.7",
            "proxy-addr": "~2.0.7",
            "qs": "6.10.3",
            "range-parser": "~1.2.1",
            "safe-buffer": "5.2.1",
            "send": "0.18.0",
            "serve-static": "1.15.0",
            "setprototypeof": "1.2.0",
            "statuses": "2.0.1",
            "type-is": "~1.6.18",
            "utils-merge": "1.0.1",
            "vary": "~1.1.2"
          }
        },
        "finalhandler": {
          "version": "1.2.0",
          "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz",
          "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==",
          "requires": {
            "debug": "2.6.9",
            "encodeurl": "~1.0.2",
            "escape-html": "~1.0.3",
            "on-finished": "2.4.1",
            "parseurl": "~1.3.3",
            "statuses": "2.0.1",
            "unpipe": "~1.0.0"
          }
        },
        "forwarded": {
          "version": "0.2.0",
          "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
          "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow=="
        },
        "fresh": {
          "version": "0.5.2",
          "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
          "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q=="
        },
        "function-bind": {
          "version": "1.1.1",
          "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
          "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
        },
        "get-intrinsic": {
          "version": "1.1.2",
          "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz",
          "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==",
          "requires": {
            "function-bind": "^1.1.1",
            "has": "^1.0.3",
            "has-symbols": "^1.0.3"
          }
        },
        "has": {
          "version": "1.0.3",
          "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
          "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
          "requires": {
            "function-bind": "^1.1.1"
          }
        },
        "has-symbols": {
          "version": "1.0.3",
          "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
          "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A=="
        },
        "http-errors": {
          "version": "2.0.0",
          "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz",
          "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==",
          "requires": {
            "depd": "2.0.0",
            "inherits": "2.0.4",
            "setprototypeof": "1.2.0",
            "statuses": "2.0.1",
            "toidentifier": "1.0.1"
          }
        },
        "iconv-lite": {
          "version": "0.4.24",
          "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
          "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
          "requires": {
            "safer-buffer": ">= 2.1.2 < 3"
          }
        },
        "inherits": {
          "version": "2.0.4",
          "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
          "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
        },
        "ipaddr.js": {
          "version": "1.9.1",
          "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
          "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g=="
        },
        "media-typer": {
          "version": "0.3.0",
          "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
          "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ=="
        },
        "merge-descriptors": {
          "version": "1.0.1",
          "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
          "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w=="
        },
        "methods": {
          "version": "1.1.2",
          "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
          "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w=="
        },
        "mime": {
          "version": "1.6.0",
          "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
          "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg=="
        },
        "mime-db": {
          "version": "1.52.0",
          "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
          "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="
        },
        "mime-types": {
          "version": "2.1.35",
          "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
          "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
          "requires": {
            "mime-db": "1.52.0"
          }
        },
        "ms": {
          "version": "2.0.0",
          "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
          "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
        },
        "negotiator": {
          "version": "0.6.3",
          "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz",
          "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg=="
        },
        "object-inspect": {
          "version": "1.12.2",
          "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz",
          "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ=="
        },
        "on-finished": {
          "version": "2.4.1",
          "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz",
          "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==",
          "requires": {
            "ee-first": "1.1.1"
          }
        },
        "parseurl": {
          "version": "1.3.3",
          "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
          "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ=="
        },
        "path-to-regexp": {
          "version": "0.1.7",
          "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
          "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ=="
        },
        "proxy-addr": {
          "version": "2.0.7",
          "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz",
          "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==",
          "requires": {
            "forwarded": "0.2.0",
            "ipaddr.js": "1.9.1"
          }
        },
        "qs": {
          "version": "6.10.3",
          "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz",
          "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==",
          "requires": {
            "side-channel": "^1.0.4"
          }
        },
        "range-parser": {
          "version": "1.2.1",
          "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
          "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg=="
        },
        "raw-body": {
          "version": "2.5.1",
          "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz",
          "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==",
          "requires": {
            "bytes": "3.1.2",
            "http-errors": "2.0.0",
            "iconv-lite": "0.4.24",
            "unpipe": "1.0.0"
          }
        },
        "safe-buffer": {
          "version": "5.2.1",
          "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
          "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="
        },
        "safer-buffer": {
          "version": "2.1.2",
          "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
          "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
        },
        "send": {
          "version": "0.18.0",
          "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz",
          "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==",
          "requires": {
            "debug": "2.6.9",
            "depd": "2.0.0",
            "destroy": "1.2.0",
            "encodeurl": "~1.0.2",
            "escape-html": "~1.0.3",
            "etag": "~1.8.1",
            "fresh": "0.5.2",
            "http-errors": "2.0.0",
            "mime": "1.6.0",
            "ms": "2.1.3",
            "on-finished": "2.4.1",
            "range-parser": "~1.2.1",
            "statuses": "2.0.1"
          },
          "dependencies": {
            "ms": {
              "version": "2.1.3",
              "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
              "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
            }
          }
        },
        "serve-static": {
          "version": "1.15.0",
          "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz",
          "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==",
          "requires": {
            "encodeurl": "~1.0.2",
            "escape-html": "~1.0.3",
            "parseurl": "~1.3.3",
            "send": "0.18.0"
          }
        },
        "setprototypeof": {
          "version": "1.2.0",
          "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
          "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw=="
        },
        "side-channel": {
          "version": "1.0.4",
          "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
          "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
          "requires": {
            "call-bind": "^1.0.0",
            "get-intrinsic": "^1.0.2",
            "object-inspect": "^1.9.0"
          }
        },
        "statuses": {
          "version": "2.0.1",
          "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
          "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ=="
        },
        "toidentifier": {
          "version": "1.0.1",
          "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
          "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA=="
        },
        "type-is": {
          "version": "1.6.18",
          "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
          "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
          "requires": {
            "media-typer": "0.3.0",
            "mime-types": "~2.1.24"
          }
        },
        "unpipe": {
          "version": "1.0.0",
          "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
          "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ=="
        },
        "utils-merge": {
          "version": "1.0.1",
          "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
          "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA=="
        },
        "vary": {
          "version": "1.1.2",
          "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
          "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg=="
        }
      }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111
    • 112
    • 113
    • 114
    • 115
    • 116
    • 117
    • 118
    • 119
    • 120
    • 121
    • 122
    • 123
    • 124
    • 125
    • 126
    • 127
    • 128
    • 129
    • 130
    • 131
    • 132
    • 133
    • 134
    • 135
    • 136
    • 137
    • 138
    • 139
    • 140
    • 141
    • 142
    • 143
    • 144
    • 145
    • 146
    • 147
    • 148
    • 149
    • 150
    • 151
    • 152
    • 153
    • 154
    • 155
    • 156
    • 157
    • 158
    • 159
    • 160
    • 161
    • 162
    • 163
    • 164
    • 165
    • 166
    • 167
    • 168
    • 169
    • 170
    • 171
    • 172
    • 173
    • 174
    • 175
    • 176
    • 177
    • 178
    • 179
    • 180
    • 181
    • 182
    • 183
    • 184
    • 185
    • 186
    • 187
    • 188
    • 189
    • 190
    • 191
    • 192
    • 193
    • 194
    • 195
    • 196
    • 197
    • 198
    • 199
    • 200
    • 201
    • 202
    • 203
    • 204
    • 205
    • 206
    • 207
    • 208
    • 209
    • 210
    • 211
    • 212
    • 213
    • 214
    • 215
    • 216
    • 217
    • 218
    • 219
    • 220
    • 221
    • 222
    • 223
    • 224
    • 225
    • 226
    • 227
    • 228
    • 229
    • 230
    • 231
    • 232
    • 233
    • 234
    • 235
    • 236
    • 237
    • 238
    • 239
    • 240
    • 241
    • 242
    • 243
    • 244
    • 245
    • 246
    • 247
    • 248
    • 249
    • 250
    • 251
    • 252
    • 253
    • 254
    • 255
    • 256
    • 257
    • 258
    • 259
    • 260
    • 261
    • 262
    • 263
    • 264
    • 265
    • 266
    • 267
    • 268
    • 269
    • 270
    • 271
    • 272
    • 273
    • 274
    • 275
    • 276
    • 277
    • 278
    • 279
    • 280
    • 281
    • 282
    • 283
    • 284
    • 285
    • 286
    • 287
    • 288
    • 289
    • 290
    • 291
    • 292
    • 293
    • 294
    • 295
    • 296
    • 297
    • 298
    • 299
    • 300
    • 301
    • 302
    • 303
    • 304
    • 305
    • 306
    • 307
    • 308
    • 309
    • 310
    • 311
    • 312
    • 313
    • 314
    • 315
    • 316
    • 317
    • 318
    • 319
    • 320
    • 321
    • 322
    • 323
    • 324
    • 325
    • 326
    • 327
    • 328
    • 329
    • 330
    • 331
    • 332
    • 333
    • 334
    • 335
    • 336
    • 337
    • 338
    • 339
    • 340
    • 341
    • 342
    • 343
    • 344
    • 345
    • 346
    • 347
    • 348
    • 349
    • 350
    • 351
    • 352
    • 353
    • 354
    • 355
    • 356
    • 357
    • 358
    • 359
    • 360
    • 361
    • 362
    • 363
    • 364
    • 365
    • 366
    • 367
    • 368
    • 369
    • 370
    • 371
    • 372
    • 373
    • 374
    • 375
    • 376
    • 377
    • 378
    • 379
    • 380
    • 381
    • 382
    • 383
    • 384
    • 385
    • 386
    • 387
    • 388
    • 389
    • 390
    • 391
    • 392
    • 393
    • 394
    • 395
    • 396
    • 397
    • 398
    • 399
    • 400
    • 401
    • 402
    • 403
    • 404
    • 405
    • 406
    • 407
    • 408
    • 409
    • 410
    • 411
    • 412
    • 413
    • 414
    • 415
    • 416
    • 417
    • 418
    • 419
    • 420
    • 421
    • 422
    • 423
    • 424
    • 425
    • 426
    • 427
    • 428
    • 429
    • 430
    • 431
    • 432
    • 433

    在这里插入图片描述
    package.json定义了有依赖包,比如说大于某一个版本,最终使用哪个版本会由package-lock.json决定,并且你会发现 package-lock.json里面的依赖包会比package.json更多,思考一下原因?

    原因:依赖包本身也会依赖于其他包,而package-lock.json文件会把这些其他包也表示出来

    比如,我们打开一下 express的package,json文件:

    "dependencies": {
        "accepts": "~1.3.8",
        "array-flatten": "1.1.1",
        "body-parser": "1.20.0",
        "content-disposition": "0.5.4",
        "content-type": "~1.0.4",
        "cookie": "0.5.0",
        "cookie-signature": "1.0.6",
        "debug": "2.6.9",
        "depd": "2.0.0",
        "encodeurl": "~1.0.2",
        "escape-html": "~1.0.3",
        "etag": "~1.8.1",
        "finalhandler": "1.2.0",
        "fresh": "0.5.2",
        "http-errors": "2.0.0",
        "merge-descriptors": "1.0.1",
        "methods": "~1.1.2",
        "on-finished": "2.4.1",
        "parseurl": "~1.3.3",
        "path-to-regexp": "0.1.7",
        "proxy-addr": "~2.0.7",
        "qs": "6.10.3",
        "range-parser": "~1.2.1",
        "safe-buffer": "5.2.1",
        "send": "0.18.0",
        "serve-static": "1.15.0",
        "setprototypeof": "1.2.0",
        "statuses": "2.0.1",
        "type-is": "~1.6.18",
        "utils-merge": "1.0.1",
        "vary": "~1.1.2"
      },
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33

    它也依赖于了几十个包。

    关于package.json介绍完毕,我们来看看如何根据它来下载安装当前项目所依赖的包。

    npm install

    记住不需要带入任何参数。

    1.4.4.4 把包写入 package.json 文件 —— npm install / i 模块名 --save 安装包(******** 非常重要)

    上面介绍了项目的package.json文件的重要性,那么如何在本地项目中也把我们引入的一些包写入到项目中呢?

    一般我们上传代码是不会上传对应包,其他人会通过这个文件去下载对应的包

    安装模块时输入命名:

    • npm install / i --save
    • save参数表示写入到package.json文件

    比如:我们使用 npm 命令安装常用的 Node.js web框架模块 express:

    npm install express --save

    然后我们就会发现package.json文件会写入对应包依赖:
    在这里插入图片描述

    1.4.5 搜索包信息 —— npm search 包名

    比如:我这里搜索express
    在这里插入图片描述

    1.4.6 删除包 —— npm remove / r 包名

    npm remove module name

    比如:这里删除express

    npm remove express

    在这里插入图片描述

    1.4.6 更新包 —— npm update 包名

    npm update module name

    比如:这里更新express

    npm update express

    2、VSCode环境安装

    Visual Studio Code (简称 VS Code / VSC) 是一款免费开源的现代化轻量级代码编辑器,支持几乎所有主流的开发语言的语法高亮、智能代码补全、自定义热键、括号匹配、代码片段、代码对比 Diff、GIT 等特性,支持插件扩展,并针对网页开发和云端应用开发做了优化。软件跨平台支持 Win、Mac 以及 Linux。

    2.1 下载安装文件

    点击 下载链接

    在这里插入图片描述

    • 根据电脑的系统与所需版本点击下载链接(一般情况下点击Windows按钮即可)

    2.2 安装过程(傻瓜式一路点下去)

    在这里插入图片描述
    找到我们下载的文件,直接双击它。
    在这里插入图片描述

    勾选,我接受许可协议(使用人家的东西,就得接受人家的许可声明)

    点击next 下一步
    在这里插入图片描述

    可以看到VSCode的默认安装路径为C:\users\用户名\AppData\Local\Programs\Microsoft VS Code。平时我们安装软件,应该也看到过这Program Files,它表示的是,64位软件的默认安装目录。Program Files(x86)表示32位软件的安装默认路径。如果我们想换个目录,点击Change(浏览),修改安装路径。这里我们不做多余的操作,默认安装路径。点击下一步

    点击next,下一步
    在这里插入图片描述

    点击next,下一步
    在这里插入图片描述

    建议全部勾上,点击Next下一步

    • 1、创建桌面快捷方式效果:
      在这里插入图片描述
    • 2、将“通过Code打开”操作添加到 Windows 资源管理器文件上下文菜单效果:
      在这里插入图片描述
    • 3、将“通过Code打开”操作添加到 Windows 资源管理器目录上下文菜单效果:
      在这里插入图片描述
    • 4、添加到PATH
      将VSCode添加到环境变量Path中,可以在控制台中输入code打开VS Code

    在这里插入图片描述

    这里就是我们的整体安装配置。

    点击Next下一步,等待安装完毕
    在这里插入图片描述
    在这里插入图片描述

    这里就安装完毕VSCode开发环境,非常简单。

    2.3 图标说明

    在这里插入图片描述

    2.4 插件管理(非常有用功能)

    在这里插入图片描述
    vscode上提供了非常多的有用插件,需要根据具体情况去下载,非专栏重点内容。

    3、总结

    篇②我们主要先把NodeJs运行环境搭建起来,并且按照VsCode开发工具。先把工具准备好,才能继续下一步的代码学习。

  • 相关阅读:
    springboot236基于springboot在线课程管理系统的设计与实现
    C++Atomic与内存序
    【日拱一卒】如何编写测试用例(下)
    爬虫框架Scrapy学习笔记-3
    Kubernetes日志收集常用套路盘点
    Python 学习 Day39
    UMI
    c 的I/O 复用:select()
    梦想编织者——Adobe Dreamweaver
    酷玩Go命令行工具—Cobra
  • 原文地址:https://blog.csdn.net/weixin_44614230/article/details/126394406