我正在使用 Node serialport库,需要使用 --unsafe-perm
和 --build-from-source
参数安装。我只希望在安装serialport
时使用这些参数。如果我在命令行上运行以下命令,它工作正常:
sudo npm install serialport@5.0.0 --unsafe-perm --build-from-source
基于this post ,我的理解是,您可以通过使用 preinstall
脚本来完成此操作,如下所示:
"preinstall": "sudo npm install serialport@5.0.0 --unsafe-perm --build-from-source"
但是,当我运行该命令时,出现以下错误:
npm ERR! Error: EACCES: permission denied, mkdir '/Users/test/node_modules/.staging'
npm ERR! at Error (native)
npm ERR! { Error: EACCES: permission denied, mkdir '/Users/test/node_modules/.staging'
npm ERR! at Error (native)
npm ERR! errno: -13,
npm ERR! code: 'EACCES',
npm ERR! syscall: 'mkdir',
npm ERR! path: '/Users/test/node_modules/.staging' }
npm ERR!
npm ERR! Please try running this command again as root/Administrator.
因此,尽管我在命令中指定了 sudo
,但它并未作为根事件运行?
如何使用这些标志通过 package.json
安装 serialport
?
最佳答案
好吧,这花了一段时间才弄清楚,但我想我现在明白了。
事实证明,当您有一个 package.json
文件,其中包含您以 root 身份执行的 preinstall
或 postinstall
脚本时, npm
将以减少的权限运行它。您必须包含 --unsafe-perms
标志让它以 root 身份执行脚本。所以长短就是你需要跑
sudo npm i --unsafe-perm
或者您可以使用以下条目创建一个 .npmrc
文件:
unsafe-perm = true
如果您选择 .npmrc
路线,则不必在命令行上指定 --unsafe-perm
。
当然,所有这些只有当您以 root 身份运行 npm i
时才需要,这并不安全。因此,如果您创建一个普通用户并授予他们直接在其中安装软件包的完全访问权限,则不必担心 --unsafe-perm
。
至于 --build-from-source
,你也不必担心这一点,因为当 electron-rebuild
意识到它无法下载适合您的环境的软件包,它会为您构建它。
关于node.js - 在 package.json 中包含模块安装参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46157964/