Knex(或任何 NPM 包)如何 运行 不同版本的节点?

How Can Knex (or Any NPM Package) Run a Different Version of Node?

我正在尝试使用 Knex 的 seed:run 命令(即 npx knex seed:run),并且在我的种子文件中添加了这一行,它记录了它正在使用的 Node 版本 运行 与:

console.log(process.version);

现在,如果我 运行 在 Node 命令提示符本身 (node) 中 相同的代码行,我得到:

v14.2.0

同样,当我运行node --version它正确returnsv14.2.0

但是,当 Knex 运行 是我的种子文件时,我看到的是:

v11.15.0

任何人都可以解释一下 how/why Knex 使用的是不同版本的 Node,我怎样才能让它停止?

P.S。我已经尝试清除我的 node_modules 文件夹并通过 npm i 重新安装,但 Knex 继续以某种方式使用旧节点。 Knex 本身已安装最新版本 (0.21.1)。

如果您有在特权帐户 (root) 中运行的全局安装,以及针对当前用户的本地安装,则可能会发生这种情况。 您可能正在使用某些节点版本控制工具来管理 nodejs 版本,它会为覆盖默认配置的节点的托管版本创建一个符号 link。有很多工具可以做到这一点,例如 nvm、n.

Danizavtz 的回答并没有为我解决问题,但确实为我指明了正确的方向。我意识到我 确实 有两个版本的 Node:一个是 Linux 安装的(使用 apt-get),另一个是我自己安装的(以获得更新的节点版本)。

我的解决方案是通过以下方式删除 Node 的系统版本:

sudo apt-get remove node

这给我留下了一个可以工作的节点……但它删除了我的 npm。我想我可以重新安装所有东西,但因为我已经有 node 并且只需要 npm,我下载了最新的 Node 安装并使用其中的 node 安装 npm。我在有和没有 sudo 的情况下都这样做了(我不确定是否有必要在没有 sudo 的情况下这样做,因为它没有解决问题):

sudo ~/node-v14.3.0-linux-x64/bin/node ~/node-v14.3.0-linux-x64/bin/npm i -g npm

在那之后,当我 运行 npx/npm!

时,我终于得到了预期的 Node 版本