通过deploy.cmd文件在天蓝色Web应用程序部署中Grunt安装失败

JPR*_*ddy 6 git deployment azure bower grunt-cli

我正在尝试使用Azure的Git部署来构建和打包我的项目.

我创建了以下文件

  1. .deployment
  2. deploy.cmd
  3. Gruntfile.js
  4. 的package.json
  5. bower.json

我跟随杰伊哈里斯的博客文章.下面给出了deploy.cmd文件中的部署部分:

:: 2. Select node version
call :SelectNodeVersion

:: 3. Install npm packages
IF EXIST "%DEPLOYMENT_TARGET%\package.json" (
  pushd "%DEPLOYMENT_TARGET%"
  call :ExecuteCmd !NPM_CMD! install --production
  IF !ERRORLEVEL! NEQ 0 goto error
  popd
)

:: 4. Install bower packages
IF EXIST "%DEPLOYMENT_TARGET%\bower.json" (
  call !NPM_CMD! install bower
  IF !ERRORLEVEL! NEQ 0 goto error
  call .\node_modules\.bin\bower install
  IF !ERRORLEVEL! NEQ 0 goto error
)

:: 4. run grunt
IF EXIST "%DEPLOYMENT_TARGET%\Gruntfile.js" ( 
  call !NPM_CMD! install grunt-cli  
  call .\node_modules\.bin\grunt --no-color clean common dist
  IF !ERRORLEVEL! NEQ 0 goto error
)
Run Code Online (Sandbox Code Playgroud)

部署失败,出现以下错误:

Selected npm version 3.8.6
Updating iisnode.yml at D:\home\site\wwwroot\iisnode.yml
spa@ D:\home\site\wwwroot
+-- bower@1.7.9  extraneous
npm WARN grunt-contrib-compass@1.0.4 requires a peer of grunt@>=0.4.0 but none was installed.
+-- UNMET PEER DEPENDENCY grunt@>=0.4.0
`-- grunt-cli@1.2.0  extraneous

spa@ D:\home\site\repository
`-- bower@1.7.9  extraneous

spa@ D:\home\site\repository
+-- bower@1.7.9  extraneous
`-- grunt-cli@1.2.0  extraneous

grunt-cli: The grunt command line interface (v1.2.0)

Fatal error: Unable to find local grunt.

If you're seeing this message, grunt hasn't been installed locally to
your project. For more information about installing and configuring grunt,
please see the Getting Started guide:

http://gruntjs.com/getting-started
An error has occurred during web site deployment.
npm WARN grunt-contrib-compass@1.0.4 requires a peer of grunt@>=0.4.0 but none was installed.\r\nC:\Program Files (x86)\SiteExtensions\Kudu\55.50610.2267\bin\Scripts\starter.cmd deploy.cmd
Run Code Online (Sandbox Code Playgroud)

我不确定我还需要做什么来安装它.试图通过网络搜索类似的问题,但找不到任何具体的解决方案.如果有人能帮助我,那将是很棒的.

我的package.json

{
  "name": "myapp",
  "private": true,
  "devDependencies": {
    "autoprefixer-core": "^5.2.1",
    "grunt": "^0.4.5",
    "grunt-angular-templates": "^0.5.7",
    "grunt-concurrent": "^1.0.0",
    "grunt-contrib-clean": "^0.6.0",
    "grunt-contrib-compass": "^1.0.0",
    "grunt-contrib-concat": "^0.5.0",
    "grunt-contrib-connect": "^0.9.0",
    "grunt-contrib-copy": "^0.7.0",
    "grunt-contrib-cssmin": "^0.12.0",
    "grunt-contrib-htmlmin": "^0.4.0",
    "grunt-contrib-imagemin": "^1.0.0",
    "grunt-contrib-jshint": "^0.11.0",
    "grunt-contrib-uglify": "^0.7.0",
    "grunt-contrib-watch": "^0.6.1",
    "grunt-filerev": "^2.1.2",
    "grunt-google-cdn": "^0.4.3",
    "grunt-jscs": "^1.8.0",
    "grunt-newer": "^1.1.0",
    "grunt-ng-annotate": "^0.9.2",
    "grunt-postcss": "^0.5.5",
    "grunt-svgmin": "^2.0.0",
    "grunt-usemin": "^3.0.0",
    "grunt-wiredep": "^2.0.0",
    "imagemin": "^5.2.1",
    "jasmine-core": "^2.4.1",
    "jit-grunt": "^0.9.1",
    "jshint-stylish": "^1.0.0",
    "karma": "^0.13.22",
    "karma-jasmine": "^1.0.2",
    "karma-phantomjs-launcher": "^1.0.0",
    "phantomjs-prebuilt": "^2.1.7",
    "readable-stream": "^2.1.4",
    "through2": "^2.0.1",
    "time-grunt": "^1.0.0",
    "vinyl-fs": "^2.2.1"
  },
  "engines": {
    "node": ">=0.10.0"
  },
  "scripts": {
    "test": "karma start test\\karma.conf.js"
  }
}
Run Code Online (Sandbox Code Playgroud)

注意:到目前为止还没有找到解决方案,我要去Azure支持团队找出我能做什么.一旦找到任何解决方案,我会更新问题.

Von*_*onC 2

大多数类似的 问题(但不适用于天蓝色)都指向:

npm install grunt --save-dev
npm install -g grunt --save-dev
Run Code Online (Sandbox Code Playgroud)

(如果要从脚本-g使用,请尝试全局安装)grunt

该线程提到 grunt 应该安装并存在于PATHfor azure 中:

问题不在于grunt在路径(“”)上找不到D:\Program Files (x86)\grunt\0.1.13\grunt。它确实开始运行,但它grunt本身在抱怨。
如果我进入Kudu控制台并从文件夹中运行“ gruntD:\home\site\repository,它会显示完全相同的内容。

projectkudu/kudu第 1150 期确认:

在本地(即在 Azure 之外)运行 Kudu 时不会发生这种情况。
也许 Azure 网站上的运行时环境有些奇怪。

如grunt issues 1459所示,检查退出状态错误代码:

$ echo $?
99
Run Code Online (Sandbox Code Playgroud)

我们首先会重命名该node_modules/grunt目录,这样grunt-cli就无法找到本地的grunt。这应该会导致错误代码 99。

预期的结果出现了,这让我相信误导性的grunt-cli错误消息使开发人员误以为 Grunt 本身返回了错误的错误代码。

因此,对于 Azure,grunt 可能已安装并位于路径上,但不是grunt-cli预期的位置。