OSX high sierra 上的纱线权限问题

yarn permission problems on OSX high sierra

我真的在这个问题上摸不着头脑,并且花了大约 1.5 天的时间来尝试解决这个问题

我认为这个问题与以某种方式重置的权限有关 - 我怀疑这是在我让新手训练营助手为 windows 双引导

分区后发生的

环境:

在 ts-node 上使用 Alsatian 和 Zalenium 框架在打字稿中编写 selenium 测试用例 - 以下命令用于初始化测试 运行ner

yarn run ts-node Tests/runner.ts --tap

yarn 环境运行正在通过 brew

package.json:

{  
  "dependencies": {
    "@types/dotenv": "^4.0.2",
    "@types/selenium-webdriver": "^3.0.8",
    "alsatian": "^2.2.1",
    "axios": "^0.17.1",
    "dotenv": "^5.0.0",
    "moment": "^2.20.1",
    "selenium-webdriver": "^4.0.0-alpha.1",
    "tap-spec": "^4.1.1",
    "ts-node": "^4.1.0",
    "tslib": "1.8.1",
    "typescript": "^2.6.2"
  }
}

runner.ts:

import tapSpec = require('tap-spec');
import { TestSet, TestRunner } from "alsatian";
import { config as dotenv } from 'dotenv';

(async () =>
{
    // Load up any pseudo environment variables
    dotenv({ path: __dirname + '/../.env' });

    // Setup the alsatian test runner
    let testRunner = new TestRunner();
    let tapStream = testRunner.outputStream;
    let testSet = TestSet.create();
    testSet.addTestsFromFiles('/**/*/*.spec.ts');

    // This will output a human readable report to the console.
    tapStream.pipe(tapSpec()).pipe(process.stdout);

    // Runs the tests
    await testRunner.run(testSet);
})()
.catch(e =>
{
    console.error(e);
    process.exit(1);
});

问题:

我怀疑问题是在我使用 bootcamp 助手安装双启动 windows 后开始的

我在 windows 的另一个项目中工作了 3-4 天,当我回来时,开始遇到权限问题

最初他们是沿着 { Error: EACCES: permission denied, scandir '/Library/Application Support/xxxx'

的路线

我使用 chmod 解决了这个问题,如下所述 - 现在我卡住了 - 阅读第 7 点和第 8 点,我不知道是什么导致了这个问题 - 但我怀疑它是 yarn 权限

我有 - 之前也更新到 typescript 2.7.1 因为我在 tsconfig 中使用选项 "strictPropertyInitialization": false - 最初我认为这导致了一些问题,但恢复到 2.6.2 没有'解决了它

  1. 移除并重建 node_modules
  2. 运行分区上磁盘实用程序的急救
  3. 重置权限:https://support.apple.com/en-us/HT203538
  4. 重新安装 yarn
  5. 重新安装 brew
  6. g运行ted 每个抱怨的文件夹 sudo chmod -R 777 '/Library/Application Support',现在抱怨无法访问 '/System/Library/User Template',不能在这里使用 chmod 因为我得到错误,不允许操作

  7. yarn 运行 ts-node Tests/runner.ts --tap 给出:

    警告package.json:没有许可证字段 $ /Users/dshamim/Projects/Acurus/ANEX/anex/ANEX.Website.ManagementPortal.Tests/node_modules/.bin/ts-node Tests/runner.ts --tap { 错误:EACCES:权限被拒绝,scandir '/System/Library/User 模板' 在 Object.fs.readdirSync (fs.js:924:18) 在 GlobSync._readdir (/Users/dshamim/Projects/Acurus/ANEX/anex/ANEX.Website.ManagementPortal.Tests/node_modules/glob/sync.js:288:41) 在 GlobSync._readdirInGlobStar (/Users/dshamim/Projects/Acurus/ANEX/anex/ANEX.Website.ManagementPortal.Tests/node_modules/glob/sync.js:267:20) 在 GlobSync._readdir (/Users/dshamim/Projects/Acurus/ANEX/anex/ANEX.Website.ManagementPortal.Tests/node_modules/glob/sync.js:276:17) 在 GlobSync._processReaddir (/Users/dshamim/Projects/Acurus/ANEX/anex/ANEX.Website.ManagementPortal.Tests/node_modules/glob/sync.js:137:22) 在 GlobSync._process (/Users/dshamim/Projects/Acurus/ANEX/anex/ANEX.Website.ManagementPortal.Tests/node_modules/glob/sync.js:132:10)0 在 GlobSync._processReaddir (/Users/dshamim/Projects/Acurus/ANEX/anex/ANEX.Website.ManagementPortal.Tests/node_modules/glob/sync.js:207:10) 在 GlobSync._process (/Users/dshamim/Projects/Acurus/ANEX/anex/ANEX.Website.ManagementPortal.Tests/node_modules/glob/sync.js:132:10) 在 GlobSync._processGlobStar (/Users/dshamim/Projects/Acurus/ANEX/anex/ANEX.Website.ManagementPortal.Tests/node_modules/glob/sync.js:380:10) 在 GlobSync._process (/Users/dshamim/Projects/Acurus/ANEX/anex/ANEX.Website.ManagementPortal.Tests/node_modules/glob/sync.js:130:10) 错误号:-13, 代码:'EACCES', 系统调用:'scandir', 路径:'/System/Library/User 模板'} 错误 命令失败,退出代码为 1。 info 访问 https://yarnpkg.com/en/docs/cli/run 获取有关此命令的文档。

  8. sudo yarn 运行 ts-node Tests/runner.ts --tap 给出:

    { 错误:EBADF:错误的文件描述符,scandir '/dev/fd/13' 在 Object.fs.readdirSync (fs.js:924:18) 在 GlobSync._readdir (/Users/dshamim/Projects/Acurus/ANEX/anex/ANEX.Website.ManagementPortal.Tests/node_modules/glob/sync.js:288:41) 在 GlobSync._readdirInGlobStar (/Users/dshamim/Projects/Acurus/ANEX/anex/ANEX.Website.ManagementPortal.Tests/node_modules/glob/sync.js:267:20) 在 GlobSync._readdir (/Users/dshamim/Projects/Acurus/ANEX/anex/ANEX.Website.ManagementPortal.Tests/node_modules/glob/sync.js:276:17) 在 GlobSync._processReaddir (/Users/dshamim/Projects/Acurus/ANEX/anex/ANEX.Website.ManagementPortal.Tests/node_modules/glob/sync.js:137:22) 在 GlobSync._process (/Users/dshamim/Projects/Acurus/ANEX/anex/ANEX.Website.ManagementPortal.Tests/node_modules/glob/sync.js:132:10) 在 GlobSync._processReaddir (/Users/dshamim/Projects/Acurus/ANEX/anex/ANEX.Website.ManagementPortal.Tests/node_modules/glob/sync.js:207:10) 在 GlobSync._process (/Users/dshamim/Projects/Acurus/ANEX/anex/ANEX.Website.ManagementPortal.Tests/node_modules/glob/sync.js:132:10) 在 GlobSync._processGlobStar (/Users/dshamim/Projects/Acurus/ANEX/anex/ANEX.Website.ManagementPortal.Tests/node_modules/glob/sync.js:380:10) 在 GlobSync._process (/Users/dshamim/Projects/Acurus/ANEX/anex/ANEX.Website.ManagementPortal.Tests/node_modules/glob/sync.js:130:10) 错误号:-9, 代码:'EBADF', 系统调用:'scandir', 路径:'/dev/fd/13'} 错误命令失败,退出代码为 1。

2017 年 2 月 1 日至 19 日更新:

我已经放置了一个 test.ts 文件 - 它除了打印到控制台外什么都不做,如果我从 yarn ts-node 调用它,那工作正常

yarn run ts-node Tests/test.ts

输出:

yarn run v1.3.2
warning package.json: No license field
$ /Users/dshamim/Projects/Acurus/ANEX/anex/ANEX.Website.ManagementPortal.Tests/node_modules/.bin/ts-node Tests/test.ts
this is a test
✨  Done in 0.61s.

test.ts:

(async () =>
{
    console.log("this is a test");

})()
.catch(e =>
{
    console.error(e);
    process.exit(1);
});

我也尝试过,@ILI 的评论建议 - 我在 mac 分区上使用磁盘实用程序中的急救修复了权限,因为 brew 不再支持 sudo,我从 brew 中卸载纱线,并使用

将其添加到全局包中
sudo yarn install yarn -g 

但仍然有相同的 EACCESS 错误 - 错误:EACCES:权限被拒绝,scandir '/Library/Application Support/OpenVPN/profile'

也试过 运行ning yarn --verbose,没有从那里得到太多细节

yarn run --verbose ts-node Tests/runner.ts --tap
yarn run v1.3.2
warning package.json: No license field
verbose 0.331 Checking for configuration file "/Users/dshamim/Projects/Acurus/ANEX/anex/ANEX.Website.ManagementPortal.Tests/.npmrc".
verbose 0.331 Checking for configuration file "/Users/dshamim/.npmrc".
verbose 0.331 Checking for configuration file "/usr/local/etc/npmrc".
verbose 0.332 Checking for configuration file "/Users/dshamim/Projects/Acurus/ANEX/anex/ANEX.Website.ManagementPortal.Tests/.npmrc".
verbose 0.332 Checking for configuration file "/Users/dshamim/Projects/Acurus/ANEX/anex/.npmrc".
verbose 0.332 Checking for configuration file "/Users/dshamim/Projects/Acurus/ANEX/.npmrc".
verbose 0.332 Checking for configuration file "/Users/dshamim/Projects/Acurus/.npmrc".
verbose 0.332 Checking for configuration file "/Users/dshamim/Projects/.npmrc".
verbose 0.332 Checking for configuration file "/Users/dshamim/.npmrc".
verbose 0.333 Checking for configuration file "/Users/.npmrc".
verbose 0.333 Checking for configuration file "/Users/dshamim/Projects/Acurus/ANEX/anex/ANEX.Website.ManagementPortal.Tests/.yarnrc".
verbose 0.333 Checking for configuration file "/Users/dshamim/.yarnrc".
verbose 0.334 Found configuration file "/Users/dshamim/.yarnrc".
verbose 0.334 Checking for configuration file "/usr/local/etc/yarnrc".
verbose 0.334 Checking for configuration file "/Users/dshamim/Projects/Acurus/ANEX/anex/ANEX.Website.ManagementPortal.Tests/.yarnrc".
verbose 0.334 Checking for configuration file "/Users/dshamim/Projects/Acurus/ANEX/anex/.yarnrc".
verbose 0.334 Checking for configuration file "/Users/dshamim/Projects/Acurus/ANEX/.yarnrc".
verbose 0.335 Checking for configuration file "/Users/dshamim/Projects/Acurus/.yarnrc".
verbose 0.337 Checking for configuration file "/Users/dshamim/Projects/.yarnrc".
verbose 0.338 Checking for configuration file "/Users/dshamim/.yarnrc".
verbose 0.338 Found configuration file "/Users/dshamim/.yarnrc".
verbose 0.338 Checking for configuration file "/Users/.yarnrc".
verbose 0.34 current time: 2018-02-19T00:39:49.960Z
$ /Users/dshamim/Projects/Acurus/ANEX/anex/ANEX.Website.ManagementPortal.Tests/node_modules/.bin/ts-node Tests/runner.ts --tap
{ Error: EACCES: permission denied, scandir '/Library/Application Support/OpenVPN/profile'
    at Object.fs.readdirSync (fs.js:924:18)
    at GlobSync._readdir (/Users/dshamim/Projects/Acurus/ANEX/anex/ANEX.Website.ManagementPortal.Tests/node_modules/glob/sync.js:288:41)
    at GlobSync._readdirInGlobStar (/Users/dshamim/Projects/Acurus/ANEX/anex/ANEX.Website.ManagementPortal.Tests/node_modules/glob/sync.js:267:20)
    at GlobSync._readdir (/Users/dshamim/Projects/Acurus/ANEX/anex/ANEX.Website.ManagementPortal.Tests/node_modules/glob/sync.js:276:17)
    at GlobSync._processReaddir (/Users/dshamim/Projects/Acurus/ANEX/anex/ANEX.Website.ManagementPortal.Tests/node_modules/glob/sync.js:137:22)
    at GlobSync._process (/Users/dshamim/Projects/Acurus/ANEX/anex/ANEX.Website.ManagementPortal.Tests/node_modules/glob/sync.js:132:10)
    at GlobSync._processReaddir (/Users/dshamim/Projects/Acurus/ANEX/anex/ANEX.Website.ManagementPortal.Tests/node_modules/glob/sync.js:207:10)
    at GlobSync._process (/Users/dshamim/Projects/Acurus/ANEX/anex/ANEX.Website.ManagementPortal.Tests/node_modules/glob/sync.js:132:10)
    at GlobSync._processGlobStar (/Users/dshamim/Projects/Acurus/ANEX/anex/ANEX.Website.ManagementPortal.Tests/node_modules/glob/sync.js:380:10)
    at GlobSync._process (/Users/dshamim/Projects/Acurus/ANEX/anex/ANEX.Website.ManagementPortal.Tests/node_modules/glob/sync.js:130:10)
  errno: -13,
  code: 'EACCES',
  syscall: 'scandir',
  path: '/Library/Application Support/OpenVPN/profile' }
verbose 51.049 Error: Command failed with exit code 1.
    at /usr/local/Cellar/yarn/1.3.2/libexec/lib/cli.js:35620:15
    at Generator.throw (<anonymous>)
    at step (/usr/local/Cellar/yarn/1.3.2/libexec/lib/cli.js:92:30)
    at /usr/local/Cellar/yarn/1.3.2/libexec/lib/cli.js:105:13
    at <anonymous>
    at process._tickCallback (internal/process/next_tick.js:160:7)
error Command failed with exit code 1.
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.

有时候我们错过的是简单的事情,别担心我们都来过。

这是一个想多了的问题,要从澳大利亚啤酒广告中偷一句台词,你需要"UNDERTHINK IT"。 https://youtu.be/1MdAhVetBq8

事实上,您的简单测试脚本可以运行但主要测试运行器没有运行,这会为我指出单步执行测试运行器脚本的方向,而不是查看 yarn 或任何其他罪魁祸首。

原来你是让 alsatian 在你的整个硬盘上搜索测试用例,其中一些文件夹它没有访问权限。

变化:

testSet.addTestsFromFiles('/**/*/*.spec.ts');

收件人:

testSet.addTestsFromFiles('**/*/*.spec.ts');

或:

testSet.addTestsFromFiles('./**/*/*.spec.ts');

一切都应该如您所愿。