设为首页 收藏本站
查看: 1508|回复: 0

[经验分享] 在Windows Azure Web Site上为Node.js自动安装NPM包

[复制链接]

尚未签到

发表于 2016-5-24 12:01:05 | 显示全部楼层 |阅读模式
  在我以前的一个文章中,我描述和演示了如何在Node.jsWindowsAzure
Web Site (WAWS)
使用NPM包。在那篇文章中我使用NPM命令安装软件包,然后使用GitWindows提交我所做的更改,并且同步它们到WAWSgit
资源库。然后WAWS将触发新的部署托管我的WAWSgit
资源库应用程序。

  有人可能会注意到,NPM包可能包含多个文件,而且可能有点大。例如,"azure"包,WindowsAzure SDKNode.js的包,大约6MB。另外一个常用的含有给Node.js使用的MVC框架包”express”,大约是1MB。当我首次将节点放到WindowsAzure时,所有的节点必须上载到云。
  是否可能让Windows Azure为我们下载并安装这些包?在这篇文章中,我将演示在部署时如何使
  WAWS 为我们安装所有需要的包。
  让我们开始演示
  演示是最直接的。让我们创建一个新的WAWS并把它复制到我的当地磁盘。为Windows拖动文件夹到Git,以至于我们可以提交和发送。
  如果你不熟悉怎样使用Windows
Windows Azure Web SiteGit部署、git副本和Git,请参考
这篇文章
  然后打开命令窗口,在我们的代码文件夹中安装一个包。我们说我想要安装“express”
DSC0000.png
  然后创建一个新的Node.js文件,命名为“server.js”,并粘贴如下代码。

var express = require("express");  
var app = express();   
app.get("/", function(req, res) {      res.send("Hello Node.js and Express.");    });
console.log("Web application opened.");  
app.listen(process.env.PORT);
  
假如现在我们切换到WindowsGit,我们将会发现他它检测到我们所做的更改,其中包括“server.js”“node_modules”文件夹下的所有文件。我们需要上传的只是我们的源代码,但是这个巨大的包文件也必须被上传。现在我将演示如何排除它,并且在云上让WindowsAzure安装包。
  首先我们需要添加一个名为“.gitignore”的特殊文件。由于这个文件仅仅包含扩展名,它似乎不能直接从文件浏览器添加。因此我们需要从命令行添加。导航到本地资源库的文件夹,并执行下面的命令来创建一个名为“.gitignore”的空文件夹。假如命令窗口要求输入,只需要按下Enter键。

echo > .gitignore
DSC0001.png
  现在打开此文件,复制下面的内容并保存。

node_modules
  
现在如果我们切换到Windows
Git,我们将会发现在“node_modules”下的包没有在更改列表中。

  所以现在我们提交和发送,“express”包将会被加载到Windows Azure
DSC0002.png
  其次,在部署时让我们告诉Windows Azure哪个包需要安装。创建另一个名为“package.json”的文件,复制下面的内容到文件并保存。

{   
"name": "npmdemo",   
"version": "1.0.0",   
"dependencies": {   
"express": "*"   
}     
}
  
现在返回到WindowsGit,提交我们的更改,并将它发送到WAWS
DSC0003.png
  然后让我们在开发人员门户中打开WAWS,我们将看到一个新的部署被完成。单击部署右侧的箭头,我们能够发现WAWS如何处理此部署。特别是我们发现被NPM执行的WAWS
DSC0004.png
  假如我们打开日志,我们可以看到安装包WAWS执行的指令和安装输出信息。正如您从云端看到WAWS为我安装的“express”,因此我们不需要将所有堆的包上传到Azure.
DSC0005.png
  打开此网站,我们可以看到结果。这证明“express”已经被成功安装。
DSC0006.png
  下面发生了什么?
  现在让我们来解释“.gitignore”
“package.json”的意思。

  “.gitignore”git库的一个忽略配置文件。所有列在“.gitignore”中的文件和文件夹将从git发送中跳过。在下面的事例中,我复制“node_modules”到本地存储库中的文件。这意味着,不跟踪和上传“node_modules”文件夹下的所有文件。因此通过使用“.gitignore”,从上传到WindowsAzure我跳过了所有的包。
  “.gitignore”可以包含文件和文件夹。它还可以包含我们不想忽略的文件和文件夹。在下一章中,我们将会看到如何使用不被忽略的语法使SQL包含在内。
  “package.json”文件是Node.js应用程序的包定义文件。我们可以在“package.json”文件中以JSON格式定义应用程序名、版本、描述、作者等信息。我们也可以放置相互依赖的包,指示哪个包是Node.js需要的。
  WAWS中,名称和版本是必要的。当部署发生时,WAWS将查找此文件,找到依赖包,并执行NPM命令逐个安装。因此在上面的演示中,我复制“express”到这个文件,以至于WAWS将会为我自动安装它。
  我手动更新“package.json”文件的依赖项部分。但是这可以部分自动完成。假如在本地的存储库中我们有有效的“package.json”,当我们安装包时,我们可以在“npminstall”命令中指定“--save”参数。以至于NPM帮助我们更新依赖项部分。
  例如,当我们想要安装“azure”,我们应该执行下面的命令。注意,我添加了“--save”命令。

npm install azure --save
  一旦它完成,我的“package.json”将会自动更新。
DSC0007.png
  这里将介绍每个依赖的包。当值是版本范围时,JSON键值是包名。以下是版本范围格式的简明列表。有关“package.json”的详细信息,请参阅此处

  格式

  说明

  示例

  版本

  版本必须完全匹配。

  "azure""0.6.7"

  > = 版本

  必须等于或大于版本。

  "azure""> 0.6.0"

  1.2.x

  版本号必须从提供的数字开始,任何数字可以代替 x

  "azure":"0.6.x"

  ~ 版本

  版本必须至少和系列一样,它必须小于以上范围的下一个重大修订。

  "azure""~ 0.6.7"

  *

  匹配任何版本。

  "azure"""



  基于您在此处的定义WAWS将安装合适版本的包。WAWS git部署和NPM安装也是如此。
DSC0008.png
  但是一些包...
  我们知道,当我们在“package.json”中指定依赖项,WAWS将下载并安装它们到云上。对于大多数包,它运行正常。但有一些特殊的包可能不能运行。假如包安装需要一些特殊的环境约束它,这意味着它可能失败。
  例如,当NPM安装期间,Node.js包的SQLServer驱动程序需要“node-gyp”Python
C++2010
被安装在目标机器上。假如我们仅仅把“msnodesql”放在“package.json”文件中,并将它发送到WAWS,由于在WAWS虚拟机中没有“node-gyp”
Python
C++2010,部署将会失败。

  例如,“server.js”文件。
DSC0009.png

var express = require("express");   
var app = express();   
app.get("/", function(req, res) {   
res.send("Hello Node.js and Express.");   
});   
var sql = require("msnodesql");
var connectionString = "Driver={SQL Server Native Client 10.0};Server=tcp:tqy4c0isfr.database.windows.net,1433;Database=msteched2012;Uid=shaunxu@tqy4c0isfr;Pwd=P@ssw0rd123;Encrypt=yes;Connection Timeout=30;";   
app.get("/sql", function (req, res) {   
sql.open(connectionString, function (err, conn) {   
if (err) {   
console.log(err);  
res.send(500, "Cannot open connection.");   
}   
else {   
conn.queryRaw("SELECT * FROM [Resource]", function (err, results) {   
if (err) {   
console.log(err);   
res.send(500, "Cannot retrieve records.");   
}   
else {   
res.json(results);   
}   
});   
}  
});  
});   
console.log("Web application opened.");   
app.listen(process.env.PORT);
  
“package.json”文件。

{  
"name": "npmdemo",
"version": "1.0.0",  
"dependencies": {   
"express": "*",   
"msnodesql": "*"   
}  
}
  

  他部署到WAWS失败。
DSC00010.png
  NPM日志中,我们可以看到因为“msnodesql”它不能被安装在WAWS上。
DSC00011.png
  “.gitignore”文件中我们应该忽略所有的包,除了“msnodesql”,并且我们自己上传包,这就是解决方案。这个可以通过使用下面的内容做到。首先我们不要忽略“node_modules”文件夹。然后我们忽略所有的子文件夹,但是需要git检查每个子文件夹,然后我们不要忽略名为“msnodesql”子文件夹,这个就是SQLServer
Node.js
驱动程序。


!node_modules/  
node_modules/*
!node_modules/msnodesql
  
有关“.gitignore”语法的更多信息,请参阅这篇文章
  现在假如我们转到WindowsGit,我们将会发现“msnodesql”被列入未提交集,然而“express”没有被列入。此外我也需要从“package.json”中删除“msnodesql”的依赖。
DSC00012.png
  提交并发送到WAWS。现在我们可以看到部署被成功完成。
DSC00013.png
  通过我们上传的 “msnodesql”包,我们可以使用来自Node.js应用程序的WindowsAzure SQL Database

  总结
  在这篇文章中,我演示在发布操作期间如何利用Windows Azure Web Site的部署进程进行安装NPM包。使用“.gitignore”文件和“package.json”文件我们可以忽视来自Node.js的依赖包,并让WindowsAzure
Web Site
在部署时下载和安装它们。

  某些特殊的包不能被Windows Azure Web Site安装,例如“msnodesql”,我们也可以把它们放在发布有效载荷中。
  Windows Azure Web SiteNode.js
NPM的结合,它使我们更容易和快捷地开发和部署Node.js应用程序到云。
  希望这个有所帮助,
  Shaun
  本文翻译自:
  http://blogs.shaunxu.me/archive/2012/11/16/install-npm-packages-automatically-for-node.js-on-windows-azure-web.aspx
  
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-221188-1-1.html 上篇帖子: Microsoft和Toyota宣布战略合作伙伴关系,联手构建基于Windows Azure的下一代远程通信系统 下篇帖子: Windows Azure 和必应地图通过交互的网站将Speilberg的“War Horse”的历史带进生活
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表