我使用的是节点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?
发布于 2017-09-12 13:10:42
好吧,我花了一段时间才弄明白,但我想我现在明白了。
事实证明,当您有一个包含以根用户身份执行的preinstall或postinstall脚本的package.json文件时,npm将以减少的权限运行此脚本。您必须包含--unsafe-perms标志,才能让它以根用户身份执行脚本。所以长话短说,你需要运行
sudo npm i --unsafe-perm或者,您可以使用以下条目创建.npmrc文件:
unsafe-perm = true如果使用.npmrc路由,则不必在命令行中指定--unsafe-perm。
当然,只有当您以根用户身份运行npm i时,才需要执行所有这些操作,这并不安全。因此,如果您创建了一个常规用户,并为他们提供了直接安装软件包的完全访问权限,则不必担心--unsafe-perm。
至于--build-from-source,你也不必担心这一点,因为当electron-rebuild意识到它无法为你的环境下载合适的包时,它会为你构建它。
https://stackoverflow.com/questions/46157964
复制相似问题