Node.js-环境配置-使用

分割线

环境配置

  • 之前一直在乐此不疲的修改 npm 和 yarn 的 global 路径,因为每次 Node.js 更新会导致目录索引失效…

  • 后来发现,Scoop 完美解决了这个问题! 它使用Scoop/persist这个文件夹来挂载数据,不影响程序本身,即使更新也不会影响.

分割线

安装 yarn

  • Node.js 是 JavaScript 运行环境,某个项目运行起来会需要一些依赖

  • npm/yarn/cnpm 就是管理这些依赖的, 安装 node.js 后自带 npm,不会带 yarn/cnpm, 这三个中我比较推荐用 yarn

    1. yarn 比 npm 更快一些

    2. 默认锁定版本.


  • 虽然 npm 与 yarn 是同一类东西,但是可以用 npm 安装 yarn (也可以去官网下载安装,不过那样更复杂麻烦)

    神不神奇,因为 npm 和 yarn 本身也是依赖,但是这样安装的话需要进行一些目录配置

    npm install -g  yarn
  • 强烈推荐: 用 Scoop 安装(零配置)

    scoop install yarn

分割线

加速

换源

  • 推荐: 使用 yrm, 会同时将你的 npm 和 yarn 一起切换 [1]

    yrm add njupt https://mirrors.njupt.edu.cn/nexus/repository/npm/ https://mirrors.njupt.edu.cn/help/npm/
    ╰─ yrm test

    npm ---- 1311ms
    * cnpm --- Fetch Error
    taobao - 470ms
    nj ----- Fetch Error
    rednpm - 221ms
    npmMirror 1204ms
    edunpm - 1408ms
    yarn --- Fetch Error
    yrm use taobao
  • 当然不嫌麻烦可以手动修改

    npm config set registry https://registry.npm.taobao.org
    yarn config set registry https://registry.npm.taobao.org

    也可以直接定位 npm 和 yarn 的配置文件 -> ~/.npmrc和.yarnrc


  • 检查

    npm config get registry
    yarn config get registry

  • 问题: 有时会遇到淘宝源某个文件验证失败问题 (Integrity check failed for “@types/body-parser” (computed integrity doesn’t match our records)

    解决办法是: 换回官方的源,用完之后再换成淘宝源.

    npm config set registry https://registry.npmjs.org
    yarn config set registry https://registry.npmjs.org

代理

  • 设置代理

    npm config set proxy http://127.0.0.1:7890
    npm config set https-proxy http://127.0.0.1:7890
    yarn config set proxy http://127.0.0.1:7890
    yarn config set https-proxy http://127.0.0.1:7890
  • 删除代理

    npm config delete proxy
    npm config delete https-proxy
    yarn config delete proxy
    yarn config delete https-proxy

分割线

依赖升级

  • package path 简介

    • Node.Js 的包管理器有npm,cnpm,yarn等,通过上面操作后咱就用npm
    • Node.Js 通过 npm 可以安装 hexo 模块,hexo 里面的插件也是通过 npm 安装
    • npm 安装/升级/移除的模块都在node_modules/里面,不会影响外面的东西
  • npm check && upgrade(node 插件)

    npm install -g npm-check
    npm install -g npm-upgrade
    • 使用:直接npm-check/npm-upgrade
  • 缓存清理

    • 会清空 node_cache
    npm cache clean --force

分割线

参数及常用命令

详见 yarn 的常用命令

  • 按照 package.json 文件的配置安装 module 到 node_modules/里面

-g(global)

  • 全局安装/卸载
  • 注意脚手架如果是全局安装的话,卸载也要加上-g才能全局卸载.

-save

  • 默认直接 install 会安装进那个目录,但是不会修改 package.json 文件
  • 加上-save 会修改文件,使下次 npm install 也会安装
  • 写在前面和后面都可以
    • npm install --save hexo-tag-aplayer
    • npm install hexo-tag-aplayer --save

分割线

local-全局依赖

  • npm

    npm install -g eslint
  • yarn

    yarn global add hexo-cli
    yarn global add vsce

  • 全局依赖路径: 用 Scoop 安装的,其数据挂载摆脱了C盘!, npm 与 yarn 管理方式并不全然一样

    • node-npm: Scoop\persist\nodejs\bin

    • yarn: Scoop\persist\yarn\global

分割线

运行报错

依赖出错

node_modules\pascal-case\dist\index.js:21
...
  • 有可能是依赖有故障了,其实用不着挨个排除是哪个依赖有问题

  • 直接把node_modules整个删掉,然后npm install就好了.


没装项目依赖

> live2d-moc3@1.0.0 uglifyjs
> uglifyjs src/live2d.js -o dist/live2d.min.js

Parse error at src/live2d.js:2,6
class Live2dLoader {
^
ERROR: Unexpected token: name «Live2dLoader», expected: punc «;»
at JS_Parse_Error.get (eval at <anonymous> (D:\Repos\Weidows\Blog-private\node_modules\uglify-js\tools\node.js:18:1), <anonymous>:71:23)
at fatal (D:\Repos\Weidows\Blog-private\node_modules\uglify-js\bin\uglifyjs:394:27)
at run (D:\Repos\Weidows\Blog-private\node_modules\uglify-js\bin\uglifyjs:343:9)
at Object.<anonymous> (D:\Repos\Weidows\Blog-private\node_modules\uglify-js\bin\uglifyjs:259:5)
at Module._compile (node:internal/modules/cjs/loader:1097:14)
at Object.Module._extensions..js (node:internal/modules/cjs/loader:1151:10)
at Module.load (node:internal/modules/cjs/loader:975:32)
at Function.Module._load (node:internal/modules/cjs/loader:822:12)
at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:77:12)
at node:internal/main/run_main_module:17:47
终端进程“D:\Scoop\shims\pwsh.exe -Command npm run uglifyjs”已终止,退出代码: 1。

如上, uglifyjs 已经装了 global 依赖, 但是项目并没装 (没 node_modules),仍会报错


Protocol-not-supported

 pnpm install
 WARN  deprecated puppeteer@3.3.0: < 19.4.0 is no longer supported
 WARN  deprecated uuid@2.0.3: Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.
Packages: +129
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Packages are hard linked from the content-addressable store to the virtual store.
Content-addressable store is at: D:\Scoop\apps\nvm\current\store\v3
Virtual store is at: node_modules/.pnpm
node_modules/.pnpm/registry.npmmirror.com+puppeteer@3.3.0/node_modules/puppeteer: Running instnode_modules/.pnpm/registry.npmmirror.com+puppeteer@3.3.0/node_modules/puppeteer: Running install script, failed in 288mssed 129, downloaded 0, added 129, done
.../node_modules/puppeteer install$ node install.js
│ ERROR: Failed to set up Chromium r756035! Set "PUPPETEER_SKIP_DOWNLOAD" env variable to sk
│ TypeError [ERR_INVALID_PROTOCOL]: Protocol "https:" not supported. Expected "http:"
│ at new NodeError (node:internal/errors:399:5)
│ at new ClientRequest (node:_http_client:183:11)
│ at Object.request (node:https:364:10)
│ at httpRequest (D:\Repos\Hebau-Community\.github\node_modules\.pnpm\registry.npmmirror
│ at downloadFile (D:\Repos\Hebau-Community\.github\node_modules\.pnpm\registry.npmmirro
│ at BrowserFetcher.download (D:\Repos\Hebau-Community\.github\node_modules\.pnpm\regist
│ at async download (D:\Repos\Hebau-Community\.github\node_modules\.pnpm\registry.npmmir
│ -- ASYNC --
│ at BrowserFetcher.<anonymous> (D:\Repos\Hebau-Community\.github\node_modules\.pnpm\reg
│ at fetchBinary (D:\Repos\Hebau-Community\.github\node_modules\.pnpm\registry.npmmirror
│ at download (D:\Repos\Hebau-Community\.github\node_modules\.pnpm\registry.npmmirror.co
│ code: 'ERR_INVALID_PROTOCOL'
│ }
└─ Failed in 289ms at D:\Repos\Hebau-Community\.github\node_modules\.pnpm\registry.npmmirror.com+puppeteer@3.3.0\node_modules\puppeteer
  1. node 版本太高了, 得降级 [3]

  2. 另外如果是 puppeteer 的话, 可以试试: [4]

    env PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true pnpm install
    pnpm install puppeteer --unsafe-perm

    不过这样虽然能装上, 但运行时可能会报错

  3. 也可能是依赖项安装失败(没找到版本号), 比如我遇到的是 svgexport, 它所依赖的 puppeteer 版本号不对, 安装失败

    这个就得去修改项目 config.json 了

分割线

多版本管理

环境变量原因报错

ERROR open \settings.txt: The system cannot find the file specified.

遇到这个报错的话,是因为环境变量还没起效,重启电脑


切换版本报错

exit status 145: The directory is not empty.
  • 有可能是在安装/切换 node 版本时退出了终端导致非正常终止, 解决办法为重装/排查 nvm/settings.txt

    看到下面 origin 开头的两行了吗? 直接删掉

    root: D:\Game\Scoop\persist\nvm\nodejs
    arch: 64
    proxy: http://127.0.0.1:7890
    originalpath: .
    originalversion:
    node_mirror: https://npm.taobao.org/mirrors/node/
    npm_mirror: https://npm.taobao.org/mirrors/npm/

分割线

大前端工具

版本拟定

  • 之前一直手动起草 package.json 中的 version,略显笨拙

    不知道 npm 自带 version 管理功能

  • npm version

    npm version [| major | minor | patch | premajor | preminor | prepatch | prerelease [–preid=] | from-git]

    喏,可以拟定大小版本.

    一般用这三个: major(大) -> minor(小) -> patch(补丁)

    另外需要注意,使用之前要 git commit,不然没法使用.


uglifyjs

yarn global add uglify-js
yarn global add uglify-es

uglifyjs xxx.js -o xxx.min.js
uglifyjs xxx.js -m -o xxx.min.js // 更小

分割线

借物表

[1]: yarn 源管理工具 yrm

[2]: 很多人上来就删除的 package-lock.json,还有这么多你不知道的(深度内容)

[3]: npm ERRcode ERR*INVALID_PROTOCOL Protocol “https:“ not supported. Expected “http:“*懮 俍的博客-CSDN 博客

[4]: puppetter 安装就踩坑-解决篇 - 掘金