个人解决 Grunt 文件权限问题的旅程

Avatar of Geoff Graham
Geoff Graham

DigitalOcean 为您旅程的每个阶段提供云产品。 立即开始使用 价值 200 美元的免费积分!

上周我在做一个个人项目,当我尝试编译我的 Sass 文件时,遇到一个奇怪的错误。 不幸的是,我没有截取错误的屏幕截图,但它类似于以下内容

Failed to write to location cssmin: style.css EACCES

该 EACCES 代码让我不知所措,但我能够推断出这是一个文件权限问题,因为错误描述指出它无法写入文件,并且通过一些快速的 StackOverflow 搜索。

我找不到很多关于如何解决此问题的答案,所以我尝试自己修复它。 我发现许多论坛帖子建议这可能是 Node 的权限问题,所以我经历了重新安装它的痛苦过程,结果却更糟糕,因为终端甚至无法找到 npmgrunt 任务。

最后,我不得不联系一位朋友(感谢 Neal!)来解决问题。 我想记录一下他带我经历的过程,以防将来帮助其他人。

我要先说明一下,我在使用 Mac。 也就是说,我不确定这里涵盖的内容是否普遍适用于所有平台。

重新安装 Node

在与 Neal 交流之前,我已经通过 nodejs.org 上的安装程序包重新安装了 Node。

有人告诉我,在我的项目中,直到我再次使用包管理器重新安装 Node,我的权限问题很可能会再次出现。 有些人使用 Homebrew,虽然我在论坛上看到了一些反对它的原因。 Node 版本管理器 看起来是一个不错的选择,因为它专门设计用于管理同一台机器上的多个 Node 版本,这使得将来的安装和项目中的版本切换变得容易。

设置指向 Node 模块的路径

安装完 Node 后,我以为我可以将终端指向我的项目

cd /path/to/my/project/folder

…然后安装我在项目的 package.json 文件中添加的 Node 模块

npm install

结果,我得到了以下结果

npm: command not found

糟糕。 我不是刚刚重新安装了 Node 吗?

事实证明,终端(更准确地说,我的系统总体上)对 Node 的安装位置做出了假设,需要告知它在哪里查找。

我通过打开系统的 .bash_profile 文件并在其中添加路径来解决这个问题。 你可以变得更专业一点,使用类似以下命令的工具在终端中打开文件

touch .bash_profile
open .bask_profile

或者像我一样,直接使用代码编辑器打开它。 它是一个隐藏文件,但大多数代码编辑器会在文件夹面板中显示这些文件。 该文件应该位于你的用户目录中,类似于 Macintosh HD > Users > Your User Folder

这是我添加的内容,以确保 Node 被引用到正确的位置

export PATH="$HOME/.npm-packages/bin:$HOME/.node/bin:$PATH"

这实际上是告诉系统去 .npm-packages/bin/ 目录中查找 Node 命令。 事实上,如果我浏览到该文件夹,确实可以看到我的 NPM 和 Grunt 命令,这两个命令以前终端都无法找到。

有了这个小片段并将其保存到 .bash_profile 中,当我再次尝试安装我的 Node 模块时,我兴奋不已

cd /path/to/my/project/folder
npm install

…并看到一切按预期加载!

更新权限

我的命令又可以正常运行了,但我仍然得到与本文开头相同的 EACCES 错误。

问题是,项目文件夹最初是作为 Root 用户创建的,这可能是我在终端使用 sudo 执行其他操作时造成的。 结果,使用我的用户帐户运行 Grunt 任务不足以让 Grunt 拥有写入这些文件夹的权限。

我将目录更改为 Grunt 尝试写入 style.css 文件的文件夹,然后检查该文件夹的权限

cd /path/of/the/parent/directory
ls -al

这将显示该目录中所有文件和文件夹的权限。 它显示该文件夹的权限实际上没有为我的用户帐户设置写入该文件夹的权限。 我将目录更改为该特定文件夹,并使用以下命令将自己设为所有者(当然,将 username 替换为我的用户名)

sudo chown -R username:staff

我再次运行 Grunt 任务,结果一切顺利,编译并保存,如我所愿。

总结

我知道我遇到的问题可能只属于我,或者是我自己造成的,但我希望这能帮助其他人。 作为一个网页设计师,命令行对我来说可能令人生畏甚至有点可怕,即使我觉得我应该熟悉依赖于它的工具。

我们有像 StackOverflow 这样的社区驱动网站,这很棒,在我们需要的时候可以依靠它们。 同时,寻求个人帮助往往是不可替代的。