介绍

  • 免费开源跨平台
  • 服务器上的 Javascript 运行环境
  • 基于 Chrome V8 引擎,事件驱动非阻塞式I/O

安装

  • win自行下载程序安装
  • centos安装如下
    1
    2
    3
    4
    5
    6
    7
    8
    # wget https://nodejs.org/dist/v14.16.1/node-v14.16.1-linux-x64.tar.xz    // 下载
    # tar xf node-v10.9.0-linux-x64.tar.xz // 解压
    # cd node-v10.9.0-linux-x64/ // 进入解压目录
    # ./bin/node -v // 执行node命令 查看版本

    设置软连接(需要管理员权限)
    ln -s /home/cxvh/soft/node-v14.16.1-linux-x64/bin/ /usr/local/bin/
    ln -s /home/cxvh/soft/node-v14.16.1-linux-x64/bin/ /usr/local/bin/

全局依赖位置修改:

  • npm config get prefix查看全局依赖包路径
  • npm config set prefix "D:\nodejs\npm_global"设置全局依赖包路径
  • npm config get cache查看缓存路径
  • npm config set cache "D:\nodejs\npm_cache"设置缓存路径

win11改完不生效?

  • 打开设置,搜索环境变量,点击编辑环境变量
  • 找到用户变量的pathC:\Users\<ussername>\AppData\Roaming\npm,修改为

包管理工具

npm、cnpm

  • 安装命令:npm install -g cnpm --registry=https://registry.npm.taobao.org
  • 官方网址:https://npm.taobao.org/

Yarn

nvm (node 版本管理)

  • node所有版本node version
  • nvm-github
    1
    2
    3
    4
    5
    6
    7
    8
    curl -o- https://cdn.jsdelivr.net/gh/nvm-sh/nvm@master/install.sh | bash # 安装完重启下
    sudo /bin/bash -c "$(curl -o- https://cdn.jsdelivr.net/gh/nvm-sh/nvm@master/install.sh)" # 安装完重启下
    nvm --sersion # 查看版本
    nvm list # 查看安装的所有 node
    nvm ls-remote # 查看服务器端所有可用 node 版本,如果版本不支持查看,请点击上面的链接查看所有版本
    nvm install v15.1.0 # 安装 node
    nvm --help # 指令帮助
    nvm use v10.15.1 # 切换 node

nrm (npm 镜像源切换)

npm i -g nrm

  • win使用gitbash执行命令
    • nrm ls
    • nrm use cnpm

linux 后台运行 node 方法

pm2 后台运行 node

  • 安装npm install -g pm2
  • 自启动pm2 startup centos
  • 运行命令示例(*文件后缀要加上 .js*)
    • pm2 start add.js
    • pm2 start server/add.js
    • pm2 start -- run server相当于npm run server
  • 其它命令
    • pm2 list #查看进程
    • pm2 stop/reload/restart/delete all #停止/重载/重启/删除 所有进程
    • pm2 stop/reload/restart/delete 0 #停止/重载/重启/删除 pm2进程列表中进程为0的进程
    • pm2 logs [--raw] #显示所有进程的日志
    • pm2 flush #清空所有日志文件
    • pm2 reloadLogs #重载所有日志

杂记

  • node原生支持import
    • 文件后缀改为.mjs并且node:8版本一会才支持
    • import时写上完整文件名称,如:import '../utils.ejs'
    • node版本14执行命令:node bin/index.mjs
    • node版本低于14执行命令:node --experimental-modules bin/index.mjs,并且会出来警告说是测试功能
  • 获取当前执行文件路径及名称
    • __dirname文件路径
    • __filename文件路径+文件名

报错整理

  • 执行命令出错:node --inspect-brk ./node_modules/.bin/webpack webpack.config.js --inline --progress

  • 原因:win不支持 shell 脚本

  • 解决方法1:写完整路径 npx node --inspect-brk ./node_modules/webpack/bin/webpack.js --inline --progress

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    VM51 loader.js:931 Uncaught E:\tmp\node_modules\.bin\webpack:2
    basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
    SyntaxError: missing ) after argument list
    at wrapSafe (internal/modules/cjs/loader.js:931:16)
    at Module._compile (internal/modules/cjs/loader.js:979:27)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1035:10)
    at Module.load (internal/modules/cjs/loader.js:879:32)
    at Function.Module._load (internal/modules/cjs/loader.js:724:14)
    at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:60:12)
    at internal/main/run_main_module.js:17:47
  • 文件没有执行权限

  • 加权限:chmod +x test.shell

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Error: spawn /Users/baran.lee/Desktop/cxvh-cli-test/test/bin/process/test.shell EACCES
    at Process.ChildProcess._handle.onexit (internal/child_process.js:269:19)
    at onErrorNT (internal/child_process.js:465:16)
    at processTicksAndRejections (internal/process/task_queues.js:80:21) {
    errno: -13,
    code: 'EACCES',
    syscall: 'spawn /Users/baran.lee/Desktop/cxvh-cli-test/test/bin/process/test.shell',
    path: '/Users/baran.lee/Desktop/cxvh-cli-test/test/bin/process/test.shell',
    spawnargs: [ '-al', '-bl' ],
    cmd: '/Users/baran.lee/Desktop/cxvh-cli-test/test/bin/process/test.shell -al -bl'
    }
1
2
3
4
5
6
7
8
9
10
11
FATAL ERROR: v8::Object::GetAlignedPointerFromInternalField() Unaligned pointer
1: 00007FF6908303DF napi_wrap+109311
2: 00007FF6907D5096 v8::internal::OrderedHashTable<v8::internal::OrderedHashSet,1>::NumberOfElementsOffset+33302
3: 00007FF6907D5E66 node::OnFatalError+294
4: 00007FF69107A048 v8::V8::AnnotateStrongRetainer+88
5: 00007FF6910A705A v8::Object::SlowGetAlignedPointerFromInternalField+122
6: 00007FF69084C42B v8::internal::compiler::Operator::EffectOutputCount+1003
7: 00007FF69084B58D napi_wrap+220333
8: 00007FF690F83BEA v8::internal::Isolate::RunPromiseHook+58
9: 00007FF690D87F26 v8::internal::RegExpMatchInfo::ReserveCaptures+278
10: 00007FF690B3A768 v8::WasmStreaming::OnBytesReceived+1144