Node.js的学习(一)node.js 的介绍
<h2>一、简介</h2><h3>1.1、什么是 node.js ?</h3>
<p><strong><span style="color: rgba(255, 102, 0, 1)">node.js 一种 JavaScript 的运行环境,能够使得javascript能够脱离浏览器运行。</span></strong>以前 js 只能在浏览器基础上运行,能够操作的也局限于浏览器,比如浏览器上的放大缩小操作,前提是浏览器开启的基础上进行操作(浏览器是客户端)。有了 node.js 之后,js 可以在服务端进行操作,直接在系统上进行操作,可以打开、关闭浏览器等操作。</p>
<p>简单的说 <strong><span style="color: rgba(255, 102, 0, 1)">Node.js 就是运行在服务端的 JavaScript。</span></strong>Node.js 是一个基于Chrome JavaScript 运行时建立的一个平台。<strong><span style="color: rgba(255, 102, 0, 1)">Node.js 是一个事件驱动 I/O 服务端JavaScript环境</span></strong>,基于Google的V8引擎,V8引擎执行JavaScript的速度非常快,性能非常好。</p>
<p><img src="https://img2022.cnblogs.com/blog/2762061/202209/2762061-20220911145447619-135884484.png" alt="" loading="lazy"></p>
<h3> 1.2、Node.js 的功能</h3>
<p>node.js 作为一个JavaScript 的运行环境,<strong><span style="color: rgba(255, 102, 0, 1)">提供了基础的功能和API</span><span style="color: rgba(255, 102, 0, 1)">:</span></strong>(基于node.js衍生了很多框架)</p>
<ul>
<li>
<p><span style="color: rgba(0, 0, 255, 1)">Express框架 (快速构建web应用)</span></p>
</li>
<li>
<p><span style="color: rgba(0, 0, 255, 1)">Electron 框架 (快速构建跨平台的桌面应用)</span></p>
</li>
<li>
<p><span style="color: rgba(0, 0, 255, 1)">restify 框架 (快速构建API接口项目)</span></p>
</li>
<li>
<p><span style="color: rgba(0, 0, 255, 1)">创建实用的命令行工具辅助前端开发,读写操作数据库等</span></p>
</li>
</ul>
<p>Node.js 是一个开源和跨平台的 JavaScript 运行时环境。 它几乎是任何类型项目的流行工具!</p>
<h3>1.3、Node.js 的特点</h3>
<p><span style="color: rgba(255, 102, 0, 1)"><strong>Node.js的最大特点是单线程。</strong></span></p>
<h2>二、搭建Node.js开发环境</h2>
<h3>2.1、下载Node.js</h3>
<ul>
<li>
<p>node.js官网:Node.js (nodejs.org)</p>
</li>
</ul>
<p><img src="https://img2022.cnblogs.com/blog/2762061/202208/2762061-20220807154142373-4105140.png"></p>
<ul>
<li>
<p> 版本号 LTS:稳定版(一般开发下载这个)</p>
</li>
<li>
<p> 版本号 Current:最新版</p>
</li>
</ul>
<h3>2.2、安装Node.js</h3>
<p> <img src="https://img2022.cnblogs.com/blog/2762061/202208/2762061-20220807155004124-1223771201.png"></p>
<ul>
<li>
<p>找到下载的目录里面,打开Node.js进行无脑安装,直接下一步</p>
</li>
<li>怎么知道安装成功?</li>
<li>第一种方法:win + R 打开运行对话框,输入cmd 打开命令提示符窗口,输入node -v 回车 显示安装版本号,如以下结果即为成功!</li>
</ul>
<p> <img src="https://img2022.cnblogs.com/blog/2762061/202208/2762061-20220807155941765-121874824.png"></p>
<h3>2.3、在 VS code 安装 Code Runner 插件</h3>
<p><strong><span style="color: rgba(255, 102, 0, 1)">Code Runner</span> </strong>应该是下载量最大的插件之一了,代码一键运行,并支持了 <strong><span style="color: rgba(255, 102, 0, 1)">Node.js, Python, C++, Java, PHP, Perl, Ruby, Go</span></strong> 等超过40种的语言。</p>
<p><img src="https://img2022.cnblogs.com/blog/2762061/202209/2762061-20220911151135424-2107099553.png" alt="" width="912" height="207" loading="lazy"></p>
<p>安装好 Code Runner 之后,打开你所要运行的文件,有多种方式来快捷地运行你的代码:</p>
<ul>
<li>键盘快捷键 <strong><span style="color: rgba(255, 102, 0, 1)">Ctrl+Alt+N</span></strong></li>
<li>快捷键 F1 调出 命令面板, 然后输入 Run Code</li>
<li>在编辑区,右键选择 Run Code</li>
<li>在左侧的文件管理器,右键选择 Run Code</li>
<li>右上角的运行小三角按钮</li>
</ul>
<p>停止代码运行:</p>
<ul>
<li>键盘快捷键 <strong><span style="color: rgba(255, 102, 0, 1)">Ctrl+Alt+M</span></strong></li>
<li>快捷键 F1 调出 命令面板, 然后输入 Stop Code Run</li>
<li>在Output Channel,右键选择 Stop Code Run</li>
</ul>
<p>还可以安装 <strong><span style="color: rgba(255, 102, 0, 1)">Nodejs Snippets 插件</span></strong>让 VSCode 支持<strong><span style="color: rgba(255, 102, 0, 1)">提供 Nodejs 代码的智能提示。</span></strong></p>
<p><img src="https://img2022.cnblogs.com/blog/2762061/202209/2762061-20220911151322011-919765044.png" alt="" width="770" height="184" loading="lazy"></p>
<h2> 三、第一个Node.js 程序</h2>
<h3><span style="color: rgba(0, 0, 0, 1)">3.1、在VSCode中创建一个新的项目</span></h3>
<h3>3.2、点击<span style="color: rgba(255, 102, 0, 1)"> “ 查看 ” -> " 终端 ",</span>在控制台输入<strong><span style="color: rgba(255, 102, 0, 1)"> npm init -y</span> </strong>初始化项目</h3>
<p><img src="https://img2022.cnblogs.com/blog/2762061/202209/2762061-20220911151933878-910349428.png" alt="" width="817" height="442" loading="lazy"></p>
<p> 在上面的示例中,我们是通过IDE(集成开发环境,用来表示辅助程序员开发的应用软件)完成编译与运行的,其实手动运行也可以,比如编写一段代码如下:</p>
<h4>3.2.1、新建一个 index.js 文件,作为一个web服务器</h4>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">依赖一个http模块,相当于java中的import,与C#中的using</span>
<span style="color: rgba(0, 0, 255, 1)">var</span> http = require('http'<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">创建一个服务器对象</span>
server = http.createServer(<span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> (req, res) {
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">设置请求成功时响应头部的MIME为纯文本</span>
res.writeHeader(200<span style="color: rgba(0, 0, 0, 1)">, {
</span>"Content-Type": "text/plain"<span style="color: rgba(0, 0, 0, 1)">
});
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">向客户端输出字符</span>
res.end("Hello World\n"<span style="color: rgba(0, 0, 0, 1)">);
});
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">让服务器监听本地8000端口开始运行</span>
server.listen(8000, '127.0.0.1'<span style="color: rgba(0, 0, 0, 1)">);
console.log(</span>"server is runing at 127.0.0.1:8000");</pre>
</div>
<p>代码解析:</p>
<ul>
<li>
<p><strong><span style="color: rgba(255, 102, 0, 1)">引入 required 模块</span></strong>:我们可以使用 <strong><span style="color: rgba(255, 102, 0, 1)">require 指令来载入 Node.js 模块</span></strong></p>
</li>
<li>
<p><strong><span style="color: rgba(255, 102, 0, 1)">创建服务器</span></strong>:服务器可以监听客户端的请求,类似于TomCat、IIS、Apache 、Nginx 等 HTTP 服务器。</p>
</li>
<li>
<p>接收请求与响应请求 服务器很容易创建,<strong><span style="color: rgba(255, 102, 0, 1)">客户端可以使用浏览器或终端发送 HTTP 请求,服务器接收请求后返回响应数据。</span></strong></p>
</li>
<li>
<p>第一行请求(require)Node.js 自带的 http 模块,并且把它赋值给 http 变量。</p>
</li>
<li>
<p>接下来我们调用 http 模块提供的函数: <strong><span style="color: rgba(255, 102, 0, 1)">createServer</span> </strong>。这个函数会返回 一个对象,这个对象有一个叫做 <strong><span style="color: rgba(255, 102, 0, 1)">listen</span> </strong>的方法,这个方法有一个数值参数, 指定这个 HTTP 服务器监听的端口号。</p>
</li>
</ul>
<h4>3.2.2、在node环境下解释运行:</h4>
<p><img src="https://img2022.cnblogs.com/blog/2762061/202209/2762061-20220911152707600-1488897060.png" alt="" width="815" height="441" loading="lazy"></p>
<h4> 3.2.3、运行结果:</h4>
<p><img src="https://img2022.cnblogs.com/blog/2762061/202209/2762061-20220911153117755-683319322.png" alt="" loading="lazy"></p>
<h2> 四、NPM(Node.js包管理器)</h2>
<h3>4.1、简介</h3>
当系统上安装好了 Node.js 之后,就会配套安装一个命令,叫做 npm 。npm 是 Node Package Manager 的缩写,意思是<strong><span style="color: rgba(255, 102, 0, 1)"> Node 的包管理系统</span></strong>
<h3><strong>4.2、官网</strong></h3>
<p><strong style="font-size: 14px">https://www.npmjs.com/</strong></p>
<h3>4.3、作用</h3>
<ul>
<li>
<p>允许用户从NPM服务器下载别人编写的第三方包到本地使用。</p>
</li>
<li>
<p>允许用户从NPM服务器下载并安装别人编写的命令行程序到本地使用。</p>
</li>
<li>
<p>允许用户将自己编写的包或命令行程序上传到NPM服务器供别人使用。</p>
</li>
</ul>
<h3>4.4、查看npm版本</h3>
<p>由于新版的nodejs已经集成了npm,所以之前npm也一并安装好了。同样可以通过输入 " <strong><span style="color: rgba(255, 102, 0, 1)">npm -v</span> </strong>" 来测试是否成功安装。命令如下,出现版本提示表示安装成功:</p>
<p><img src="https://img2022.cnblogs.com/blog/2762061/202209/2762061-20220911153906228-1917391559.png" alt="" loading="lazy"></p>
<h3>4.5、升级npm</h3>
<p>如果你安装的是旧版本的 npm,可以很容易得通过 npm 命令来升级:<strong><span style="color: rgba(255, 102, 0, 1)">npm install npm </span></strong></p>
<p><strong style="font-size: 14px"><img src="https://img2022.cnblogs.com/blog/2762061/202209/2762061-20220911154303791-587987253.png" alt="" loading="lazy"></strong></p>
<h3> 4.6、安装模块</h3>
<p>命令:<strong><span style="color: rgba(255, 102, 0, 1)">npm install <Module Name> -参数 或 npm i 模块名</span></strong></p>
<p>如果带参数-g表示全局安装,否则只是安装到某个目录下。</p>
<p>以下实例,我们使用 npm 命令安装常用的 Node.js web 框架模块 express,安装在某个目录下而已</p>
<p><img src="https://img2022.cnblogs.com/blog/2762061/202209/2762061-20220911154914960-432009157.png" alt="" loading="lazy"></p>
<p> 执行成功之后,可以看到该目录下自动生成了很多个文件</p>
<p><img src="https://img2022.cnblogs.com/blog/2762061/202209/2762061-20220911155003178-50847546.png" alt="" loading="lazy"></p>
<h3> 4.7、卸载模块</h3>
<p>命令:<strong><span style="color: rgba(255, 102, 0, 1)">npm uninstall <Module Name></span></strong></p>
<p>成功之后,可以到 <strong><span style="color: rgba(255, 102, 0, 1)"> /node_modules/ </span></strong> 目录下查看包是否还存在</p>
<h3>4.8、查看模块列表</h3>
<p>命令:<span style="color: rgba(255, 102, 0, 1)"><strong>npm ls</strong></span></p>
<p>使用模块列表命令可以方便的看到当前项目中依赖的包:</p>
<p> <img src="https://img2022.cnblogs.com/blog/2762061/202209/2762061-20220911155243814-1555751100.png" alt="" loading="lazy"></p>
<h3> 4.9、更新模块</h3>
<p><strong>命令<span style="color: rgba(255, 102, 0, 1)">:npm update 模块名称</span></strong></p>
<p><strong>或</strong></p>
<p><strong>命令:<span style="color: rgba(255, 102, 0, 1)">npm up -g 模块名称</span></strong></p>
<p><img src="https://img2022.cnblogs.com/blog/2762061/202209/2762061-20220911155438180-1237593447.png" alt="" loading="lazy"></p>
<h3> 4.10、搜索模块</h3>
<p>命令:<strong><span style="color: rgba(255, 102, 0, 1)">npm search 模块名称</span></strong></p>
<h3><strong>4.11、</strong>更换NPM 镜像</h3>
<p>因为npm的服务器在国外,在网络状态不好的情况下引入一个模块会因为网络延迟而失败,可以更换成国内速度更快的镜像服务器,这里以使用淘宝 NPM 镜像(http://npm.taobao.org/)为例:</p>
<p><strong><span style="color: rgba(255, 102, 0, 1)">npm install -g cnpm --registry=https://registry.npm.taobao.org</span></strong></p>
<p><img src="https://img2022.cnblogs.com/blog/2762061/202209/2762061-20220911160202030-770406447.png" alt="" loading="lazy"></p>
<p> 这样就可以使用 cnpm 命令来安装模块了:<br><strong><span style="color: rgba(255, 102, 0, 1)">$ cnpm install </span></strong></p>
<p><img src="https://img2022.cnblogs.com/blog/2762061/202209/2762061-20220911160356816-518061744.png" alt="" loading="lazy"></p>
<p>这是一个完整 npmjs.org 镜像,你可以用此代替官方版本(只读),同步频率目前为 10分钟 一次以保证尽量与官方服务同步。</p>
<p>如是安装失败,可以试试:</p>
<div class="cnblogs_code">
<pre>alias cnpm="npm --registry=https://registry.npm.taobao.org \
--cache=$HOME/.npm/.cache/<span style="color: rgba(0, 0, 0, 1)">cnpm \
</span>--disturl=https:<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">npm.taobao.org/dist \</span>
--userconfig=$HOME/.cnpmrc<span style="color: rgba(0, 0, 0, 1)">"
</span><span style="color: rgba(0, 0, 0, 1)">
# Or alias it in .bashrc or .zshrc
$ echo </span>'\n#alias for cnpm\nalias cnpm="npm --registry=https://registry.npm.taobao.org \
--cache=$HOME/.npm/.cache/<span style="color: rgba(0, 0, 0, 1)">cnpm \
</span>--disturl=https:<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">npm.taobao.org/dist \</span>
--userconfig=$HOME/.cnpmrc"' >> ~/.zshrc && source ~/.zshrc</pre>
</div>
<h3>4.12、<strong>nrm的安装</strong></h3>
<p>为了更方便的切换下包的镜像源,可以安装nrm这个小工具,利用nrm提供的终端命令,可以快速查看和切换下包的镜像源。</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">通过npm包管理器,将nrm安装为全局可用的工具</span>
npm i nrm -<span style="color: rgba(0, 0, 0, 1)">g
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">查看所有可用的镜像源</span>
<span style="color: rgba(0, 0, 0, 1)">nrm ls
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">将下包的镜像源切换为淘宝镜像</span>
nrm use taobao</pre>
</div>
<p>如图所示:</p>
<p><img src="https://img2022.cnblogs.com/blog/2762061/202209/2762061-20220911161132259-1837422699.png" alt="" width="724" height="341" loading="lazy"></p>
<h2> 五、package.json 文件的介绍</h2>
<h3>5.1、概述</h3>
<p>每个项目的根目录下面,一般都有一个<strong><span style="color: rgba(255, 102, 0, 1)"> </span></strong><code class="highlighter-rouge"><strong><span style="color: rgba(255, 102, 0, 1)">package.json</span></strong> </code>文件,<strong><span style="color: rgba(255, 102, 0, 1)">定义了这个项目所需要的各种模块,以及项目的配置信息</span></strong>(比如名称、版本、许可证等元数据)。<code class="highlighter-rouge">npm install </code>命令根据这个配置文件,自动下载所需的模块,也就是<strong><span style="color: rgba(255, 102, 0, 1)">配置项目所需的运行和开发环境。</span></strong></p>
<p><strong><span style="color: rgba(255, 102, 0, 1)">npm ini t可以通过交互的方式初始化项目,npm init -y 快速初始化一个包管理配置文件</span></strong></p>
<p>下面是一个最简单的 package.json 文件,只定义两项元数据:<strong><span style="color: rgba(255, 102, 0, 1)">项目名称和项目版本</span></strong><span style="color: rgba(255, 102, 0, 1)">。</span></p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">{
</span>"name" : "xxx"<span style="color: rgba(0, 0, 0, 1)">,
</span>"version" : "0.0.0"<span style="color: rgba(0, 0, 0, 1)">,
}</span></pre>
</div>
<p><code class="highlighter-rouge">package.json </code>文件就是一个JSON对象,该对象的每一个成员就是当前项目的一项设置。比如 <code class="highlighter-rouge">name </code>就是项目名称,<code class="highlighter-rouge">version </code>是版本(遵守“大版本.次要版本.小版本”的格式)</p>
<p>下面是一个更完整的 package.json 文件。</p>
<div class="cnblogs_code"><img src="https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif" id="code_img_closed_d6b9f4f2-b33c-48da-8439-424451a358d7" class="code_img_closed"><img src="https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif" id="code_img_opened_d6b9f4f2-b33c-48da-8439-424451a358d7" class="code_img_opened" style="display: none">
<div id="cnblogs_code_open_d6b9f4f2-b33c-48da-8439-424451a358d7" class="cnblogs_code_hide">
<pre><span style="color: rgba(0, 0, 0, 1)">{
</span>"name": "Hello World"<span style="color: rgba(0, 0, 0, 1)">,
</span>"version": "0.0.1"<span style="color: rgba(0, 0, 0, 1)">,
</span>"author": "张三"<span style="color: rgba(0, 0, 0, 1)">,
</span>"description": "第一个node.js程序"<span style="color: rgba(0, 0, 0, 1)">,
</span>"keywords":["node.js","javascript"<span style="color: rgba(0, 0, 0, 1)">],
</span>"repository"<span style="color: rgba(0, 0, 0, 1)">: {
</span>"type": "git"<span style="color: rgba(0, 0, 0, 1)">,
</span>"url": "https://path/to/url"<span style="color: rgba(0, 0, 0, 1)">
},
</span>"license":"MIT"<span style="color: rgba(0, 0, 0, 1)">,
</span>"engines": {"node": "0.10.x"<span style="color: rgba(0, 0, 0, 1)">},
</span>"bugs":{"url":"http://path/to/bug","email":"bug@example.com"<span style="color: rgba(0, 0, 0, 1)">},
</span>"contributors":[{"name":"李四","email":"lisi@example.com"<span style="color: rgba(0, 0, 0, 1)">}],
</span>"scripts"<span style="color: rgba(0, 0, 0, 1)">: {
</span>"start": "node index.js"<span style="color: rgba(0, 0, 0, 1)">
},
</span>"dependencies"<span style="color: rgba(0, 0, 0, 1)">: {
</span>"express": "latest"<span style="color: rgba(0, 0, 0, 1)">,
</span>"mongoose": "~3.8.3"<span style="color: rgba(0, 0, 0, 1)">,
</span>"handlebars-runtime": "~1.0.12"<span style="color: rgba(0, 0, 0, 1)">,
</span>"express3-handlebars": "~0.5.0"<span style="color: rgba(0, 0, 0, 1)">,
</span>"MD5": "~1.2.0"<span style="color: rgba(0, 0, 0, 1)">
},
</span>"devDependencies"<span style="color: rgba(0, 0, 0, 1)">: {
</span>"bower": "~1.2.8"<span style="color: rgba(0, 0, 0, 1)">,
</span>"grunt": "~0.4.1"<span style="color: rgba(0, 0, 0, 1)">,
</span>"grunt-contrib-concat": "~0.3.0"<span style="color: rgba(0, 0, 0, 1)">,
</span>"grunt-contrib-jshint": "~0.7.2"<span style="color: rgba(0, 0, 0, 1)">,
</span>"grunt-contrib-uglify": "~0.2.7"<span style="color: rgba(0, 0, 0, 1)">,
</span>"grunt-contrib-clean": "~0.5.0"<span style="color: rgba(0, 0, 0, 1)">,
</span>"browserify": "2.36.1"<span style="color: rgba(0, 0, 0, 1)">,
</span>"grunt-browserify": "~1.3.0"<span style="color: rgba(0, 0, 0, 1)">,
}
}</span></pre>
</div>
<span class="cnblogs_code_collapse">View Code</span></div>
<h3 class="chapter">5.2、scripts字段</h3>
<p><code class="highlighter-rouge">scripts</code><strong><span style="color: rgba(255, 102, 0, 1)">指定了运行脚本命令的npm命令行缩写</span></strong>,比如start指定了运行<code class="highlighter-rouge">npm run start</code>时,所要执行的命令。</p>
<p>下面的设置指定了 <code class="highlighter-rouge">npm run preinstall</code>、<code class="highlighter-rouge">npm run postinstall</code>、<code class="highlighter-rouge">npm run start</code>、<code class="highlighter-rouge">npm run test</code>时,所要执行的命令。</p>
<div class="cnblogs_code">
<pre>"scripts"<span style="color: rgba(0, 0, 0, 1)">: {
</span>"preinstall": "echo here it comes!"<span style="color: rgba(0, 0, 0, 1)">,
</span>"postinstall": "echo there it goes!"<span style="color: rgba(0, 0, 0, 1)">,
</span>"start": "node index.js"<span style="color: rgba(0, 0, 0, 1)">,
</span>"test": "tap test/*.js"<span style="color: rgba(0, 0, 0, 1)">
}</span></pre>
</div>
<h3>5.3、dependencies字段,devDependencies字段</h3>
<p><strong><span style="color: rgba(255, 102, 0, 1)"><code class="highlighter-rouge">dependencies</code>字段指定了项目运行所依赖的模块,<code class="highlighter-rouge">devDependencies</code>指定项目开发所需要的模块。</span></strong></p>
<p>它们都指向一个对象。该对象的各个成员,分别由模块名和对应的版本要求组成,表示依赖的模块及其版本范围。</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">{
</span>"devDependencies"<span style="color: rgba(0, 0, 0, 1)">: {
</span>"browserify": "~13.0.0"<span style="color: rgba(0, 0, 0, 1)">,
</span>"karma-browserify": "~5.0.1"<span style="color: rgba(0, 0, 0, 1)">
}
}</span></pre>
</div>
<p>对应的版本可以加上各种限定,主要有以下几种:</p>
<ul>
<li><strong>指定版本</strong>:比如<code class="highlighter-rouge">1.2.2</code>,遵循“大版本.次要版本.小版本”的格式规定,安装时只安装指定版本。</li>
<li><strong>波浪号(tilde)+指定版本</strong>:比如<code class="highlighter-rouge">~1.2.2</code>,表示安装1.2.x的最新版本(不低于1.2.2),但是不安装1.3.x,也就是说安装时不改变大版本号和次要版本号。</li>
<li><strong>插入号(caret)+指定版本</strong>:比如ˆ1.2.2,表示安装1.x.x的最新版本(不低于1.2.2),但是不安装2.x.x,也就是说安装时不改变大版本号。需要注意的是,如果大版本号为0,则插入号的行为与波浪号相同,这是因为此时处于开发阶段,即使是次要版本号变动,也可能带来程序的不兼容。</li>
<li><strong>latest</strong>:安装最新版本。</li>
</ul>
<p>注意:</p>
<p>package.json 文件可以<strong><span style="color: rgba(255, 102, 0, 1)">手工编写</span></strong>,也可以使用<strong><span style="color: rgba(255, 102, 0, 1)"> <code class="highlighter-rouge">npm init</code></span></strong>命令自动生成。</p>
<p>这个命令采用互动方式,要求用户回答一些问题,然后在当前目录生成一个基本的package.json文件。所有问题之中,只有项目名称(name)和项目版本(version)是必填的,其他都是选填的。</p>
<p>有了package.json文件,直接使用npm install命令,就会在当前目录中安装所需要的模块。</p>
<p>如果一个模块不在 <code class="highlighter-rouge">package.json </code>文件之中,可以单独安装这个模块,并使用相应的参数,将其写入 <code class="highlighter-rouge">package.json </code>文件之中。</p>
<div class="cnblogs_code">
<pre>$ npm install express --<span style="color: rgba(0, 0, 0, 1)">save
$ npm install express </span>--save-dev</pre>
</div>
<p>上面代码表示单独安装express模块,<strong><span style="color: rgba(255, 102, 0, 1)"><code class="highlighter-rouge">--save</code>参数表示将该模块写入<code class="highlighter-rouge">dependencies</code>属性,<code class="highlighter-rouge">--save-dev</code>表示将该模块写入<code class="highlighter-rouge">devDependencies</code>属性。</span></strong></p>
<p>举个栗子:导入md5 模块,实现自己姓名的加密</p>
<p>使用:lodash.concat | Lodash 中文文档 | Lodash 中文网 (lodashjs.com) 的工具库</p>
<p>package.json文件原来的版本:</p>
<p><img src="https://img2022.cnblogs.com/blog/2762061/202209/2762061-20220911162551047-1363855293.png" alt="" width="453" height="275" loading="lazy"></p>
<p> 安装模块后:</p>
<p> <img src="https://img2022.cnblogs.com/blog/2762061/202209/2762061-20220911162649257-403782973.png" alt="" width="452" height="73" loading="lazy"></p>
<p> <img src="https://img2022.cnblogs.com/blog/2762061/202209/2762061-20220911164113133-1653734191.png" alt="" width="453" height="68" loading="lazy"></p>
<p> <img src="https://img2022.cnblogs.com/blog/2762061/202209/2762061-20220911164153250-1204174571.png" alt="" width="472" height="351" loading="lazy"></p>
<p> 使用:</p>
<p><img src="https://img2022.cnblogs.com/blog/2762061/202209/2762061-20220911164311193-2094820887.png" alt="" loading="lazy"></p>
<p>运行结果:</p>
<p><img src="https://img2022.cnblogs.com/blog/2762061/202209/2762061-20220911164250169-586903181.png" alt="" loading="lazy"></p>
<div class="chapter">
<h3 id="bin字段">5.4、bin字段</h3>
</div>
<p>bin项用来指定各个内部命令对应的可执行文件的位置。</p>
<div class="cnblogs_code">
<pre>"bin"<span style="color: rgba(0, 0, 0, 1)">: {
</span>"someTool": "./bin/someTool.js"<span style="color: rgba(0, 0, 0, 1)">
}</span></pre>
</div>
<div class="chapter">
<h3 id="main字段">5.5、main字段</h3>
</div>
<p><code class="highlighter-rouge">main</code>字段指定了<strong><span style="color: rgba(255, 102, 0, 1)">加载的入口文件</span></strong>,<code class="highlighter-rouge">require('moduleName') </code>就会加载这个文件。这个字段的默认值是模块根目录下面的<code class="highlighter-rouge">index.js</code>。</p>
<div class="chapter">
<h2>六、gnvm-node.js多版本管理器</h2>
</div>
<h3>6.1、为什么要使用gnvm呢?</h3>
<p>在多个项目同时开发时,由于项目时间不同,我们会遇到不同项目所支持的 node.js 版本不一致的情况,导致运行项目时产生冲突。那么怎样可以使我们的 node.js 版本灵活支持我们所运行的项目呢?使用gnvm,Windows 下的 Node.js 多版本管理器,类似 nvm、nvmw、nodist</p>
<h3>6.2、特点</h3>
<ul>
<li>
<p>下载即用,无需配置。</p>
</li>
<li>
<p>彩色日志输出。</p>
</li>
<li>
<p>支持多线程下载。</p>
</li>
<li>
<p>内置 TAOBAO,方便切换,也支持自定义 。</p>
</li>
<li>
<p>支持 NPM 下载/安装/配置。</p>
</li>
</ul>
<h3>6.3、安装gnvm</h3>
<ol>
<li>
<p id="ud1af60ef">用管理员权限启动cmd;并确保node是空闲的(将使用中的node关闭)</p>
</li>
<li>
<p>下载gnvm</p>
<ul>
<li>gnvm下载地址:
<p>链接:https://pan.baidu.com/s/145mPSuETJzh0417JGdt6mg <br>提取码:0pfr</p>
</li>
<li>将 gnvm.exe 文件复制粘贴放在Node.js 所在的文件夹,可查看node安装的位置:<strong><span style="color: rgba(255, 102, 0, 1)">where node</span></strong> 命令</li>
</ul>
</li>
</ol>
<p> <img src="https://img2022.cnblogs.com/blog/2762061/202209/2762061-20220911171032528-80447937.png" alt="" width="467" height="368" loading="lazy"></p>
<p> 使用<strong><span style="color: rgba(255, 102, 0, 1)"> gnvm version</span></strong> 命令,验证gnvm是否可用</p>
<p> <img src="https://img2022.cnblogs.com/blog/2762061/202209/2762061-20220911171316054-656890035.png" alt="" loading="lazy"></p>
<h3> 6.4、gnvm相关指令</h3>
<div class="cnblogs_code">
<pre>0<span style="color: rgba(0, 0, 0, 1)">、安装多个 node 版本、
gnvm install latest </span>1.0.0-x86 1.0.0-x64 5.0.0 <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 安装</span>
gnvm install 10.0.0 <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 安装指定版本,也可以指定安装32位或64位,eg: gnvm install 10.0.0-x64</span>
gnvm update latest <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 更新本地 latest 的 node 版本</span>
1、gnvm search *.*.*<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">查询所有版本</span>
2<span style="color: rgba(0, 0, 0, 1)">、卸载任意版本的 node
gnvm uninstall latest </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 卸载最新版本的 node</span>
gnvm uninstall 10.0.0 <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 卸载指定版本</span>
3<span style="color: rgba(0, 0, 0, 1)">、查看本地所有安装的 node 版本
gnvm ls
</span>4<span style="color: rgba(0, 0, 0, 1)">、切换任意版本的 node
gnvm use </span>10.0.0
5<span style="color: rgba(0, 0, 0, 1)">、安装 npm
gnvm npm latest
</span>6<span style="color: rgba(0, 0, 0, 1)">、安装淘宝镜像
gnvm config registry TAOBAO</span></pre>
</div>
<p> </p><br><br>
来源:https://www.cnblogs.com/fairya/p/16683994.html
頁:
[1]