我正在使用节点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
,但它没有作为root事件运行?
如何通过serialport
使用这些标记安装package.json
?
答案 0 :(得分:1)
好的,这需要一段时间来弄清楚,但我想我现在就明白了。
事实证明,如果您的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
意识到它无法为您的环境下载相应的软件包时,它会构建它对你而言。