Azure Web App WebJob不安装节点包

我正在尝试使用nodejs创build一个webjob,脚本使用各种节点模块,但是当作业运行时,它似乎并没有预先安装软件包。

我上传的zip文件有一个包含所有依赖关系的package.json和zip根目录下的一个server.js,脚本被执行,但是根据下面的日志,它找不到要运行的模块。

我在日志中获得以下输出。

[07/28/2015 07:36:14 > 5fabb6: SYS INFO] Status changed to Initializing [07/28/2015 07:36:14 > 5fabb6: SYS INFO] Run script 'server.js' with script host - 'NodeScriptHost' [07/28/2015 07:36:14 > 5fabb6: SYS INFO] Status changed to Running [07/28/2015 07:36:15 > 5fabb6: ERR ] [07/28/2015 07:36:15 > 5fabb6: ERR ] module.js:340 [07/28/2015 07:36:15 > 5fabb6: ERR ] throw err; [07/28/2015 07:36:15 > 5fabb6: ERR ] ^ [07/28/2015 07:36:15 > 5fabb6: ERR ] Error: Cannot find module 'sendgrid' [07/28/2015 07:36:15 > 5fabb6: ERR ] at Function.Module._resolveFilename (module.js:338:15) [07/28/2015 07:36:15 > 5fabb6: ERR ] at Function.Module._load (module.js:280:25) [07/28/2015 07:36:15 > 5fabb6: ERR ] at Module.require (module.js:364:17) [07/28/2015 07:36:15 > 5fabb6: ERR ] at require (module.js:380:17) [07/28/2015 07:36:15 > 5fabb6: ERR ] at Object.<anonymous> (D:\home\site\wwwroot\App_Data\jobs\triggered\TestWebJob\dist\services\email.service.js:4:16) [07/28/2015 07:36:15 > 5fabb6: ERR ] at Module._compile (module.js:456:26) [07/28/2015 07:36:15 > 5fabb6: ERR ] at Object.Module._extensions..js (module.js:474:10) [07/28/2015 07:36:15 > 5fabb6: ERR ] at Module.load (module.js:356:32) [07/28/2015 07:36:15 > 5fabb6: ERR ] at Function.Module._load (module.js:312:12) [07/28/2015 07:36:15 > 5fabb6: ERR ] at Module.require (module.js:364:17) [07/28/2015 07:36:15 > 5fabb6: SYS INFO] Status changed to Failed [07/28/2015 07:36:15 > 5fabb6: SYS ERR ] Job failed due to exit code 8 

最好的方法是手动将node_modules进入正确的文件夹。 按照https://github.com/projectkudu/kudu/wiki/Web-jobs#copying-files-directly-in-their-proper-location

我所做的是创build没有node_modules文件夹的webjob,然后单独ftp的文件。

通过ftp将您的节点模块上传到以下文件夹

  • /网站/ wwwroot文件/ node_modules

天青节点网站的ftp视图

WebJobs在执行脚本之前不会运行npm ,因此请确保在上传中包含应用程序所依赖的模块,例如在通过门户上传的zip文件中包含node_modules

您不应该上传节点模块。 这打破了简单的git推动的目的。 而且你也不想在你的git仓库中包含节点模块。

“秘诀”是将节点模块依赖关系添加到您的主项目package.json中,然后将您的web作业添加到具有以下结构的基础项目文件夹中:

App_Data \作业\连续\ [作业名称]

此文件夹中的Web作业不需要package.json或node模块,因为它使用了主项目package.json中指定的模块。 其主文件应该被称为“run.js”。

我今天刚刚发现了这一点,在得知您不必手动将Web作业上传到Azure门户之前,您必须深入了解整个互联网,这真是一个耻辱。 微软,请为使用node.js的人添加这些东西的文档。 Azure是一个很棒的平台! 但是由于类似这样的事情,使用node.js进入Azure的障碍很大。

看到这个有用的文章更多的细节:

http://blog.amitapple.com/post/74215124623/deploy-azure-webjobs/#.V6JkF7grKUl