`
bk_lin
  • 浏览: 346318 次
社区版块
存档分类
最新评论

在Windows Azure Web Site上为Node.js自动安装NPM包

 
阅读更多

在我以前的一个文章中,我描述和演示了如何在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”

然后创建一个新的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 

现在打开此文件,复制下面的内容并保存。

node_modules 


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

所以现在我们提交和发送,“express”包将会被加载到Windows Azure

其次,在部署时让我们告诉Windows Azure哪个包需要安装。创建另一个名为“package.json”的文件,复制下面的内容到文件并保存。

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


现在返回到WindowsGit,提交我们的更改,并将它发送到WAWS

然后让我们在开发人员门户中打开WAWS,我们将看到一个新的部署被完成。单击部署右侧的箭头,我们能够发现WAWS如何处理此部署。特别是我们发现被NPM执行的WAWS

假如我们打开日志,我们可以看到安装包WAWS执行的指令和安装输出信息。正如您从云端看到WAWS为我安装的“express”,因此我们不需要将所有堆的包上传到Azure.

打开此网站,我们可以看到结果。这证明“express”已经被成功安装。

下面发生了什么?

现在让我们来解释“.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”将会自动更新。

这里将介绍每个依赖的包。当值是版本范围时,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安装也是如此。

但是一些包...

我们知道,当我们在“package.json”中指定依赖项,WAWS将下载并安装它们到云上。对于大多数包,它运行正常。但有一些特殊的包可能不能运行。假如包安装需要一些特殊的环境约束它,这意味着它可能失败。

例如,当NPM安装期间,Node.js包的SQLServer驱动程序需要“node-gyp”Python C++2010被安装在目标机器上。假如我们仅仅把“msnodesql”放在“package.json”文件中,并将它发送到WAWS,由于在WAWS虚拟机中没有“node-gyp” Python C++2010,部署将会失败。

例如,“server.js”文件。

 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失败。

NPM日志中,我们可以看到因为“msnodesql”它不能被安装在WAWS上。

“.gitignore”文件中我们应该忽略所有的包,除了“msnodesql”,并且我们自己上传包,这就是解决方案。这个可以通过使用下面的内容做到。首先我们不要忽略“node_modules”文件夹。然后我们忽略所有的子文件夹,但是需要git检查每个子文件夹,然后我们不要忽略名为“msnodesql”子文件夹,这个就是SQLServer Node.js驱动程序。

 !node_modules/  
node_modules/* 
 !node_modules/msnodesql 


有关“.gitignore”语法的更多信息,请参阅这篇文章

现在假如我们转到WindowsGit,我们将会发现“msnodesql”被列入未提交集,然而“express”没有被列入。此外我也需要从“package.json”中删除“msnodesql”的依赖。

提交并发送到WAWS。现在我们可以看到部署被成功完成。

通过我们上传的 “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

分享到:
评论

相关推荐

    nodejs + express + mongoose demo

    - Node.js:JavaScript的服务器端运行环境,允许开发者在服务器上使用JavaScript编写代码,提供了丰富的生态系统和包管理器npm。 - Express:一个轻量级的Web应用框架,为构建Web应用提供了一系列便利功能,如路由、...

    replays.animalsoftheforest.rocks:一个node.js Web应用程序,用于在Azure上获取和存储Dota2重播文件更长的时间

    一个 node.js 网络应用程序,用于在更长的时间内获取和存储 dota2 重播文件。 安装 $ npm install $ gulp 环境变量 必须设置这些变量才能使应用程序正常工作。 名称 描述 示例值 SITE_URL 站点的基本 URL ...

    universal-react-on-azure:在Azure上React服务器端渲染Webpack捆绑示例

    Azure上的Universal React 这是在Azure上运行通用React应用程序的示例。...若要在部署期间将JavaScript捆绑在Azure上,需要运行所需命令的自定义部署脚本。 使用azure-cli脚本 $ azure site deploymentscript

    sailsFirstApp:玩SailsJS和Azure

    你需要先安装Node.js,然后通过npm(Node包管理器)全局安装SailsJS: ```bash npm install sails -g ``` 创建新的Sails项目: ```bash sails new firstApp ``` 进入项目目录并启动应用: ```bash cd firstApp ...

    家庭支出与收入数据数据集,根据人口统计和地理指标进行了分类,加拿大为例,适用于数据分析、机器学习

    这个数据集提供了2010年至2021年间加拿大各省的家庭支出与收入数据,这些数据根据人口统计和地理指标进行了分类。每行代表了年份(REF_DATE)、省份(GEO)以及编码后的支出或收入类型的唯一组合(COORDINATE)。以下是该数据集的关键特点及包含的列信息: 关键特点: 支出数据:家庭支出按照收入五分位数和支出类别进行分类。 收入数据:家庭收入值根据家庭类型、较年长成年人的年龄组别和收入水平细分。 地理位置匿名化:为了保护隐私,原始的地理位置标识符被替换为如“Province 1”这样的标签。 时间序列:涵盖了超过十年的财务数据(2010–2021),适合用于纵向经济和社会趋势分析。 包含的列: REF_DATE:记录年份(2010–2021) GEO:省份标签(例如,“Province 1”) Statistic:度量类型(例如,平均家庭支出) Before-tax household income quintile:税前家庭收入水平分组 Household expenditures, summary-level categories:支出类别 UOM:计量单位 COORD

    【锂电池剩余寿命预测】GRU门控循环单元锂电池剩余寿命预测(Matlab完整源码和数据)

    1.【锂电池剩余寿命预测】GRU门控循环单元锂电池剩余寿命预测(Matlab完整源码和数据) 2.数据集:NASA数据集,已经处理好,B0005电池训练、测试; 3.环境准备:Matlab2023b,可读性强; 4.模型描述:GRU门控循环单元在各种各样的问题上表现非常出色,现在被广泛使用。 5.领域描述:近年来,随着锂离子电池的能量密度、功率密度逐渐提升,其安全性能与剩余使用寿命预测变得愈发重要。本代码实现了GRU门控循环单元在该领域的应用。 6.作者介绍:机器学习之心,博客专家认证,机器学习领域创作者,2023博客之星TOP50,主做机器学习和深度学习时序、回归、分类、聚类和降维等程序设计和案例分析,文章底部有博主联系方式。从事Matlab、Python算法仿真工作8年,更多仿真源码、数据集定制私信。

    【更新至2024年】2000-2024年各省专利侵权案件结案数数据

    2000-2024年各省专利侵权案件结案数数据 1、时间:2000-2024年 2、来源:国家知识产权J 3、指标:专利侵权案件结案数 4、范围:31省 5、用途:可用于衡量知识产权保护水平

    HMTL+JS+CSS实现贪吃蛇游戏,包含有一般模式,困难模式,还有无敌模式

    - 使用`<div>` 容器组织游戏界面,包含得分显示、游戏画布和操作按钮 - 支持三种游戏模式选择(一般模式、困难模式、无敌模式) - 移动端和桌面端兼容,提供触摸和键盘两种控制方式 2. CSS样式 : - 采用Flex布局实现页面居中显示 - 使用Grid布局实现方向按钮的排列 - 定义了游戏容器的阴影、圆角等视觉效果 - 为按钮添加了hover效果和过渡动画 3. JavaScript逻辑 : - 使用Canvas API实现游戏渲染 - 实现了蛇的移动、食物生成、碰撞检测等核心游戏逻辑 - 支持三种游戏模式,不同模式对应不同的游戏速度和规则 - 使用localStorage保存最高分记录 - 实现随机颜色生成,使游戏更具趣味性 代码整体结构清晰,功能完整,具有良好的可扩展性和可维护性。

    附件2-5:台区智能融合终端入网专业检测送检样品主要元器件清单.docx

    台区终端电科院送检文档

    基于强化学习的飞机升阻力特性预测模型实现及应用(含详细可运行代码及解释)

    内容概要:本文详细介绍了一个基于强化学习(RL)的飞机升阻力特性预测模型的实现过程。首先,定义了飞机空气动力学环境,包括状态空间、动作空间以及目标——预测升力系数(Cl)和阻力系数(Cd)。接着,通过生成模拟数据并进行预处理,创建了用于训练的数据集。然后,构建了一个神经网络代理模型,用于联合编码状态和动作,并预测升阻力系数。最后,实现了PPO算法来训练强化学习代理,使其能够根据当前状态选择最优动作,并通过不断迭代提高预测精度。文中还提供了完整的代码实现和详细的注释。 适合人群:航空航天领域的研究人员、机器学习工程师、对强化学习感兴趣的开发者。 使用场景及目标:适用于需要预测飞机升阻力特性的应用场景,如飞行器设计优化、性能评估等。目标是通过强化学习方法提升预测模型的准确性,从而为实际工程提供可靠的理论支持和技术手段。 其他说明:本文不仅涵盖了模型的设计与实现,还包括了数据生成、预处理等多个环节,有助于读者全面理解整个建模过程。同时,提供的代码可以作为研究和开发的基础,方便进一步扩展和改进。

    cmock ut aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

    cmock ut aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

    lsm6d datasheet

    lsm6d datasheet

    风力发电机传动机构的设计(增速器).rar

    风力发电机传动机构的设计(增速器)

    genesys-zu(5ev)配置petalinux(从安装到嵌入)

    genesys-zu(5ev)配置petalinux(从安装到嵌入)

    django自建博客app

    django自建博客app

    基于android平台的学生选课系统的设计与实现.zip

    Android项目原生java语言课程设计,包含LW+ppt

    幼儿园预防肺结核教育培训课件资料.pptx

    幼儿园预防肺结核教育培训课件资料

    STM32F103RCT6单片机控制气泵和电磁阀的开关,气泵和电磁阀的开和关均为开关量,使用mos管控制,mos管选择主要注意两个参数即可,一是导通的电流,二是耐压值,并且常用NMOS管

    STM32F103RCT6单片机控制气泵和电磁阀的开关 1、气泵和电磁阀的开和关均为开关量,实现控制方法有多种,比如继电器,但是继电器动作有噪声且体积较大,更好的方法为使用mos管。 2、mos管的选型:mos管选择主要注意两个参数即可,一是导通的电流,二是耐压值,并且常用NMOS管,根据要求,气泵和电磁阀供电电压为12V,所以选择的mos管耐压值要大于12V,这里选用耐压值为30V的MOS管,并且导通电流为5.8A。

    面板数据-全国各省金融监管强度数据集-含处理代码(2009-2023年).txt

    因文件较多,数据存放网盘,txt文件内包含下载链接及提取码,永久有效。失效会第一时间进行补充。样例数据及详细介绍参见文章:https://blog.csdn.net/T0620514/article/details/146916073

    将 Windows 系统中 “C:\windows\fonts” 目录下的所有字体文件

    将 Windows 系统中 “C:\windows\fonts” 目录下的所有字体文件

Global site tag (gtag.js) - Google Analytics