在我以前的一个文章中,我描述和演示了如何在Node.js和WindowsAzure
Web Site (WAWS)使用NPM包。在那篇文章中我使用NPM命令安装软件包,然后使用Git为Windows提交我所做的更改,并且同步它们到WAWSgit
资源库。然后WAWS将触发新的部署托管我的WAWSgit
资源库应用程序。
有人可能会注意到,NPM包可能包含多个文件,而且可能有点大。例如,"azure"包,WindowsAzure SDK是Node.js的包,大约6MB。另外一个常用的含有给Node.js使用的MVC框架包”express”,大约是1MB。当我首次将节点放到WindowsAzure时,所有的节点必须上载到云。
是否可能让Windows Azure为我们下载并安装这些包?在这篇文章中,我将演示在部署时如何使
WAWS 为我们安装所有需要的包。
让我们开始演示
演示是最直接的。让我们创建一个新的WAWS并把它复制到我的当地磁盘。为Windows拖动文件夹到Git,以至于我们可以提交和发送。
如果你不熟悉怎样使用Windows
的Windows Azure Web Site、Git部署、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);
假如现在我们切换到Windows的Git,我们将会发现他它检测到我们所做的更改,其中包括“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": "*"
}
}
现在返回到Windows的Git,提交我们的更改,并将它发送到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”语法的更多信息,请参阅这篇文章。
现在假如我们转到Windows的Git,我们将会发现“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 Site、Node.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
分享到:
相关推荐
azure-functions-pack, 轻松为Azure函数打包你的node.js 函数 Azure函数包这是一个工具,使它容易地包装你的Azure函数 node.js 函数,以便在Azure函数。问题解决的问题每当 on ( a 被称为"函数App冷启动") 每个函数...
Azure Pipelines 文档引用的示例 Node.js Docker 应用程序示例 Docker 和 Kubernetes Node.JS 应用程序此代码示例使用 Node.js Web 框架 Express 创建一个基本 Web 服务器,用于监听端口 8080 上的 HTTP 请求。...
《Learning.Node.js.for.Mobile.Application.Development.2015.10.pdf》这本书为希望使用Node.js进行移动应用开发的学习者提供了宝贵的资源。通过学习这本书,读者不仅可以掌握Node.js的基础知识,还能了解如何构建...
1. **环境准备**:安装Node.js和必要的开发工具,如npm(Node包管理器)。 2. **选择无服务器框架**:可能使用了AWS的Serverless Framework或Apex等工具。 3. **创建函数**:用JavaScript编写处理特定任务的函数,如...
1. **设置开发环境**:首先需要在本地机器上安装Node.js环境,然后通过npm安装必要的开发工具和依赖包。 2. **构建Web应用**:按照书中的示例,逐步学习如何使用Node.js创建简单的Web应用程序,包括路由配置、中间件...
此示例演示了调用 Node.js Web Api 的 JavaScript SPA 应用程序,该应用程序使用 Azure AD B2C 进行保护 演示如何使用 Passport.js 库通过 Azure AD B2C 保护 Node.js Web API 的示例 概述 此示例演示使用库通过...
### Microsoft Exam Ref 70-487:开发Windows Azure和Web服务 #### 知识点概述 本书《Microsoft Exam Ref 70-487:开发Windows Azure和Web服务》由William Ryan、Wouter de Kort 和 Shane Milton共同编写,并获得...
7. **开发与部署**:开发过程中,开发者可能使用`npm`(Node.js包管理器)来安装和管理依赖,使用Angular CLI进行构建和测试。部署时,后端服务一般部署在云服务器上,如Azure,前端资源通过静态托管服务提供,如...
- Work with the Skype Web SDK and Node.js to create a bot that works with SQL Server and Skype - Build an automated Flight Information Agent bot using the Twitter and Air France KLM APIs - Create a ...
azure-sdk-for-node, 用于 node.js 文档的Azure SDK 用于 Node.js的 SDK 这个项目提供了一个 node.js 包,它可以方便地使用和管理Microsoft服务。 它支持以下 sdk:旧的ASM服务( 带有 azure-asm-* 命名约定的包)新ARM...
`package-lock.json`文件是npm(Node.js的包管理器)生成的,它记录了项目中所有依赖包的具体版本,确保团队成员在不同的环境中能够得到一致的依赖安装结果。通过这个文件,你可以了解到项目所依赖的第三方库,例如...
4. OpenFaaS:开源的Serverless框架,可以在自托管的Kubernetes集群上运行Node.js函数。 四、Serverless中的Node.js开发 1. 函数设计:编写符合FaaS要求的函数,通常是接收输入、执行操作并返回结果。 2. API ...
此存储库包含在Azure Web Apps上运行Node.js 4.1.0(Stable)所需的文件。 用法 只需在项目中包含.deployment,deploy_node4.sh和iisnode.yml。 完毕! 或者,如果您想提高速度,只需单击此页面上的“部署到Azure”...
微软Windows Azure云应用开发实践 微软Windows Azure云应用开发实践是微软云计算平台的开发指南,旨在帮助开发人员快速掌握云计算平台的开发技能。本文将详细介绍微软云计算平台的架构、组件、功能和服务,以及如何...
接下来,访问Visual Studio官网(https://visualstudio.microsoft.com)下载并安装Visual Studio,记得在安装过程中选择“Node.js 开发”工作负载,这将包含所有必要的Node.js工具。 ### 二、创建Node.js项目 1. *...
Microsoft.WindowsAzure.Storage 是微软为开发者提供的一个关键库,用于与 Azure 存储服务进行交互,包括 Blob 存储、表存储、队列存储以及文件存储。版本号 7.2.1.0 暗示了这是一个经过多次迭代优化的稳定版本,...
该平台基于Web构建,利用Windows Azure的Website服务,能够快速构建和扩展排污管理平台,支持多种开发语言如ASP.NET、Java、PHP、Node.js和Python。通过集成环保部门的不同IT系统,实现数据整合与实时同步,打破信息...
Work with the Skype Web SDK and Node.js to create a bot that works with SQL Server and Skype Build an automated Flight Information Agent bot using the Twitter and Air France KLM APIs Create a ...
此示例向您展示如何使用Azure Cosmos DB服务来存储和访问Azure网站上托管的Node.js Express应用程序中的数据。 有关创建此应用程序的完整的端到端演练,请参阅 运行此示例 在运行此示例之前,必须具有以下条件: ...