问题似乎是与安装的 、 和 以及在 Ubuntu 22.0.4 系统上调用的特定 -installed 包不一致root
。user
应该node (v.19.7.0)
将nvm (0.39.3)
、和npm (v. 9.5.0)
全部npm
卸载并重新安装为,还是逐个进行 - 或者如果一切都保持原样,它会起作用吗?也许我应该注意,这只是为了让一个脚本在用户级别运行计算,即不用于网站处理大量网络流量等。svg-path-interpolator
node
nvm
npm
user
背景:我曾天真地尝试让 JavaScript 代码运行描述在这里。特定包名为svg-path-interpolator
。该项目存在许多问题,这导致我仔细检查了node
、nvm
和的安装 - 尽管使用一些简单的 java 脚本(例如来自教程或节点网站)进行简单检查可以正常工作。我认为 的版本被证明是“正确”的,例如 ,npm
这是件好事。node
19.7.0
看来我安装npm
、nvm
和 的方法node
(至少)也很幼稚。我使用的命令(我认为)顺序如下:
sudo apt install npm
sudo npm install -g svg-path-interpolator
sudo npm install svg-path-interpolator --save
npm install svg-path-interpolator
(在某一点)
sudo apt install node
(大概)
请注意,npm
首先在本地运行,没有特殊权限。我想要运行的脚本不起作用,所以我自然而然npm
地“全局”运行,并且自然而然,脚本不起作用。帮助页面说In global mode (ie, with -g or --global appended to the command), it installs the current package context (ie, the current working directory) as a global package.
- 我在其他地方读过这个想法 - 这是什么意思,CWD 正在以某种方式被使用?
我也尝试了这个--save
选项。通过进一步阅读(尤其是关于权限和工作目录),我发现这种随意的用户与管理员安装方式很糟糕。我的系统上的一些证据如下(摘录):
ls -ltraF /home/user/package-lock.json
-rw-r--r-- 1 root root 2091 Mar 5 11:46 /home/user/package-lock.json
ls -ltraF ~/node_modules/.package-lock.json
-rw-r--r-- 1 root root 1117 Mar 5 11:46 /home/user/node_modules/.package-lock.json
我还发现svg-path-interpolator
缺少以下内容:
/home/user/.nvm/versions/node/v19.7.0/lib/node_modules/npm/node_modules/
还有,node_modules
因此/usr/local/lib
很容易令人困惑。
最后一条线索:在尝试使原始任务正常工作时,另一个错误令人担忧(但这可能无关紧要):
./svgpi.mjs config.json balloons.svg output.json
[Error: ENOENT: no such file or directory, mkdir ''] {
errno: -2,
code: 'ENOENT',
syscall: 'mkdir',
path: ''
}
为了解决这个问题,我可能已经运行过一次脚本sudo
来查看会发生什么,但是它似乎没有做任何事情(我希望)。
因此,也许我不必进行可怕的完全卸载并重新安装,但只能以用户身份进行,而是可以保持原样,只需按照手册页/网页或 Stack Exchange 帖子中的指导将其删除并以某种方式package-lock.json
写出来- 我一直在仔细遵循这些指导。我试图涵盖基础知识,但我再次写了一篇很长的帖子,因为具体要问或要做的事情不清楚 - 抱歉。user
npm
nvm
答案1
这似乎让事情有了进展:
重点是运行由安装的一个小脚本npm
(如上面的链接所述)。顺便说一句,必须运行dos2unix
该脚本。手动执行export PATH=$PATH:/home/user/node_modules/my-favorite-module-package/bin/
。相关技术细节:.mjs
文件有await fs.mkdir(dir, {recursive: true});
。这产生了一个ENOENT error -2
当脚本按指示运行时 -和mkdir
输出文件。因为中的那个构造中有一个.mjs
。我省略输出文件,过程完成(显然,正确完成)。省略输出文件并不明显。我在这个答案中写的所有(...大部分)内容都是通过使用搜索引擎找到的,并且通常选择通常/优先在 Stack Overflow 或 Stack Exchange 上的热门内容 - 即所有内容都在这里。
我将保留nvm
、node
、npm
和其他任何东西(例如java
或curl
很久以前安装的东西) - 随着时间的推移,也许会对 root 拥有的package
东西做些什么。不知道为什么PATH
在经历了这一切之后没有自动设置,但没关系。
严格来说,这不是答案,而是一种解决方法 - 人们可以阅读 Meta SE 以了解 Stack Exchange 上如何处理解决方法与答案。剧透:解决方法可以是答案。