当子文件夹包含长路径文件时,Azure Web 角色不会启动

Azure Web Role wont start when child folder has files with long paths

一点非常遥远的帮助和一点挥之不去的问题。

在过去的几天里,我一直在努力解决一个非常令人沮丧的 Azure Web 角色问题。基本上我的工作流程如下:

  1. 创建一个全新的 Azure 云服务项目
  2. 添加 C# ASP.NET Web 角色(Web API)
  3. 构建并确认项目将在本地启动

你应该对这里很好。当我将 Git 存储库克隆到 Web API 项目目录时(该存储库在节点中包含一个简单的 UI 开发服务器和所有已编译的 UI资产)。我花了一些时间来整理,但本质上,一些嵌套节点依赖项的文件路径太长(依赖项有依赖项有依赖项等)并挂起了 Web 角色。

如果您想自己尝试,您可以在 Web API 项目中包含一个包含长路径文件的文件夹,或者构建一个简单的 git 存储库并使用 npm 安装一些包. UI 回购的 package.json 如下:

{
  "name": "BreaksMyHeart",
  "version": "1.0.0",
  "description": "Wont let the web role start",
  "main": "index.js",
  "dependencies": {
    "co-views": "^0.3.0",
    "flux": "^2.0.1",
    "gulp-minify-css": "^1.0.0",
    "jade": "^1.9.2",
    "koa": "^0.18.1",
    "koa-compress": "^1.0.8",
    "koa-route": "^2.4.0",
    "koa-static": "^1.4.9",
    "object-assign": "^2.0.0",
    "react": "^0.13.1"
  },
  "devDependencies": {
    "bower": "^1.4.1",
    "browserify": "^9.0.4",
    "coffee-reactify": "^3.0.0",
    "gulp": "^3.8.11",
    "gulp-batch": "^1.0.5",
    "gulp-coffee-react-transform": "0.0.2",
    "gulp-coffeelint": "^0.4.0",
    "gulp-concat": "^2.5.2",
    "gulp-imagemin": "^2.2.1",
    "gulp-nodemon": "^2.0.2",
    "gulp-react": "^3.0.1",
    "gulp-rename": "^1.2.2",
    "gulp-sourcemaps": "^1.5.1",
    "gulp-uglify": "^1.1.0",
    "gulp-util": "^3.0.4",
    "gulp-watch": "^4.2.4",
    "imagemin-pngquant": "^4.0.0",
    "koa-logger": "^1.2.2",
    "merge-stream": "^0.1.7",
    "mocha": "^2.2.4",
    "supertest": "^0.15.0",
    "vinyl-buffer": "^1.0.0",
    "vinyl-source-stream": "^1.1.0",
    "vinyl-transform": "^1.0.0"
  },
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "Mike",
  "license": "MIT"
}

明确地说,我没有在项目中包含 node_modules 目录,但这似乎没有什么不同。

Azure Compute Emulator 将警告你角色启动的时间比平时长。请继续等待,大约 10 分钟后我失去了耐心(在具有 i7 和 16G ram 的开发机器上)。

要解决此问题,请尝试删除该文件夹。您可能会发现这不是一项简单的任务,因为文件路径太长;天真

rmdir UIRepo

从命令提示符是不够的,您需要尝试这样的操作 https://superuser.com/questions/256105/how-do-i-delete-a-folder-which-is-nested-quite-deep-and-avoid-file-name-too-lon

还有人可以确认一下吗?我通过将 UI 存储库放在其他地方并适当地重新指向 gulp 构建任务来解决这个问题。

这是 node_modules 的常见问题,因为 Windows 的路径长度限制为 260 个字符。当超过这个值时,访问这些长路径的程序将出现您提到的问题。 要摆脱长路径,您可以考虑使用 shrinkwrap:

npm shrinkwrap

这会根据您当前的 node_modules 结构生成 npm-shrinkwrap.json,该结构将用于驱动进一步安装包依赖项而无需嵌套(如果不是真的需要,因为版本不同)。

The shrinkwrap command has locked down the dependencies based on what's currently installed in node_modules. When npm install installs a package with an npm-shrinkwrap.json in the package root, the shrinkwrap file (rather than package.json files) completely drives the installation of that package and all of its dependencies (recursively)