在package.json中包含模块安装参数

时间:2017-09-11 14:20:41

标签: node.js npm serial-port

我正在使用节点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

1 个答案:

答案 0 :(得分:1)

好的,这需要一段时间来弄清楚,但我想我现在就明白了。

事实证明,如果您的package.json文件包含以root身份执行的preinstallpostinstall脚本,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意识到它无法为您的环境下载相应的软件包时,它会构建它对你而言。