不嘻嘻 發表於 2023-1-16 13:14:00

Node.js 使用记录

<h2 id="基本概念">基本概念</h2>
<p>Node.js 是一个 JavaScript 运行时环境,基于 Google Chrome 的 V8 引擎,用于在服务器端执行 JavaScript 代码。在Web应用技术栈中属于<strong>后端</strong>。</p>
<h3 id="技术栈基本划分">技术栈基本划分</h3>
<p>各种杂七杂八的框架概念划分如下:</p>
<table>
<thead>
<tr>
<th>层次</th>
<th>说明</th>
<th>框架技术</th>
</tr>
</thead>
<tbody>
<tr>
<td>前端应用</td>
<td>负责用户界面,浏览器中运行</td>
<td>Vue, React, Angular (<strong>HTML+CSS+JavaScript/TypeScript</strong>)</td>
</tr>
<tr>
<td>后端应用</td>
<td>处理业务逻辑,提供 API</td>
<td>Node.js (<strong>JavaScript</strong>), Django/Flask (<strong>Python</strong>)<br> Spring/SpringBoot (<strong>Java</strong>), Rails (<strong>Ruby</strong>)</td>
</tr>
<tr>
<td>Web服务器</td>
<td>处理HTTP请求,将请求转发到后端应用<br>(反向代理、负载均衡)</td>
<td>Ngnix, Apache</td>
</tr>
<tr>
<td>数据库</td>
<td>通常已被后端框架ORM技术包含</td>
<td>MySQL, SQLite, Redis, MongoDB</td>
</tr>
</tbody>
</table>
<h3 id="相关工具">相关工具</h3>
<ul>
<li>包管理器:npm, yarn</li>
<li>版本管理:nvm, fnm, docker</li>
</ul>
<h2 id="使用记录">使用记录</h2>
<h3 id="多版本管理">多版本管理</h3>
<p>使用nvm,类似于ruby on rails中的rvm。Linux上使用nvm,Windows上使用nvm-windows</p>
<ul>
<li>菜鸟教程,注意其会和node本身冲突,记得卸载</li>
<li>配合React 的教程</li>
</ul>
<pre><code class="language-powershell"># 基本信息
nvm

# 下载版本
nvm install &lt;版本&gt;
nvm install lts# 下载最新lts版本
nvm install 20   # 下载20.19.0(lts)和fnm类似

# 选择某版本
nvm use &lt;版本&gt;

# 之后可正常使用node和npm等命令
</code></pre>
<h4 id="问题记录">问题记录</h4>
<p>nvm 1.2.2 安装低版本node时报错:</p>
<ul>
<li>安装node14:就是当前版本的bug,下个版本修<pre><code class="language-powershell">error installing 14.21.3: open C:\Users\XLUCID~1\AppData\Local\Temp\nvm-npm-1817418532\npm-v6.14.18.zip: The system cannot find the file specified.` -&gt;
</code></pre>
</li>
<li>安装node12:得手动添加npm包<pre><code class="language-powershell">Downloading npm version 6.14.16... Error while downloading https://github.com/npm/cli/archive/v6.14.16.zip - Get"https://github.com/npm/cli/archive/v6.14.16.zip": read tcp 10.192.209.143:53313-&gt;20.205.243.166:443: wsarecv: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond.
error installing 12.22.12: Could not download npm for node v12.22.12.
Please visit https://github.com/npm/cli/archive/12.22.12 to download npm.
It should be extracted to C:\Users\Xlucidator\AppData\Local\nvm\v12.22.12
</code></pre>
</li>
</ul>
<h3 id="原始node配置">原始Node配置</h3>
<p>不论是ubuntu还是windows10,对于非安装版的nodejs,在下载后所做的配置:</p>
<ul>
<li>设置环境变量:<code>NODE_ROOT</code>为nodejs根目录,<code>NODE_PATH</code>为其中node_modules目录(npm等安装的内容在其中)
<ul>
<li>对于ubuntu/linux:将<code>$NODE_ROOT/bin</code>加入<code>PATH</code>中,<code>NODE_PATH</code>为<code>$NODE_ROOT/lib/node_modules</code></li>
<li>对于windows:应用程序就在根,<code>%NODE_ROOT%</code>加入<code>PATH</code>即可,而<code>NODE_PATH</code>为<code>%NODE_ROOT%\node_modules</code></li>
</ul>
</li>
<li>换源:<code>npm config set registry &lt;镜像源&gt;</code>
<ul>
<li>记录了几种源地址</li>
<li><code>npm config get &lt;设置变量&gt;</code>可以查看</li>
</ul>
</li>
<li>新的包管理器yarn:<code>npm install -g yarn</code>
<ul>
<li>换源,似乎和npm的一样,语法也一样</li>
</ul>
</li>
<li>命令行走代理:用的应该是小写的http_proxy和https_proxy,注意变量中加上协议,否则请求出错</li>
</ul>
<p>Windows中的Powershell能用npm,但是不能用yarn(因为不允许运行yarn.ps1),cmd倒是可以。<br>
<code>Get-ExecutionPolicy</code>会发现策略是<code>Restricted</code>,在管理员权限下用<code>Set-ExecutionPolicy</code>将其改为<code>RemoteSigned</code></p>
<p>https://learn.microsoft.com/zh-cn/powershell/module/microsoft.powershell.core/about/about_execution_policies?view=powershell-7.4</p>
<pre><code class="language-powershell"># 管理员权限下
Set-ExecutionPolicy RemoteSigned

# windows命令行设代理,方便复制
## cmd
set http_proxy=http://127.0.0.1:7890
set https_proxy=http://127.0.0.1:7890

## powershell
$env:http_proxy="http://127.0.0.1:7890"
$env:https_proxy="http://127.0.0.1:7890"
</code></pre>
<p>源</p>
<pre><code># yarn
官方:https://registry.yarnpkg.com

# npm
官方:https://registry.npmjs.org

</code></pre>
<h4 id="问题记录-1">问题记录</h4>
<h5 id="ubuntu22-安装node16报错-old-deprecate">ubuntu22 安装node16报错 </h5>
<p><strong>【情况】</strong></p>
<p>用的阿里云ECS,本地apt安装只能到12,所以采取网上说法</p>
<pre><code class="language-bash">curl -sL https://deb.nodesource.com/setup_16.x | sudo -E bash -
sudo apt-get install -y nodejs
</code></pre>
<p>然后遇到报错</p>
<pre><code class="language-bash">Unpacking nodejs (16.19.0-deb-1nodesource1) ...
dpkg: error processing archive /var/cache/apt/archives/nodejs_16.19.0-deb-1nodesource1_amd64.deb (--unpack):
trying to overwrite '/usr/include/node/common.gypi', which is also in package libnode-dev 12.22.9~dfsg-1ubuntu3
dpkg-deb: error: paste subprocess was killed by signal (Broken pipe)
</code></pre>
<p><strong>【操作记录】</strong></p>
<p>先找到这篇,按照步骤尝试发现无效;</p>
<p>然后找到另外一篇,应该就是用<code>--force-overwrite</code>强制那个<code>nodejs_16.19.0-deb-1nodesource1_amd64.deb</code>包覆写,但又看了看好像说操作挺暴力,自己这儿一直是root权限就先没试。</p>
<hr>
<p>再按照第一篇的,先删了<code>/etc/apt/sources.list.d</code>的<code>nodesource.list</code>,然后<code>sudo apt --fix-broken install</code>修复了一下install;就直接<code>apt install nodejs</code>了,结果直接装回了node12。</p>
<p>估摸就是<code>curl -fsSL https://deb.nodesource.com/setup_16.x | sudo -E bash -</code>这句添加了<code>nodesource.list</code>,然后又和本地什么包有冲突。</p>
<hr>
<p>想了想反正就是node12的包没删干净(apt这种包管理原理还没搞清楚),就重新尝试删除。这回是<code>apt purge nodejs</code> + <code>apt autoremove</code> (网上关于删除命令有很多讲究和介绍,没看太懂,之前没用<code>apt autoremove</code>),这回看命令行输出感觉删了很多东西。然后再重复之前的安装操作(不过参数加了<code>-fs</code>,也不懂啥意思和之前有什么区别)</p>
<pre><code class="language-bash">curl -fsSL https://deb.nodesource.com/setup_16.x | sudo -E bash -
sudo apt-get install -y nodejs
</code></pre>
<p>就意外装好了。</p><br><br>
来源:https://www.cnblogs.com/xlucidator/p/17055189.html
頁: [1]
查看完整版本: Node.js 使用记录