【问题标题】:Deploy Express app with Typescript on Azure在 Azure 上使用 Typescript 部署 Express 应用
【发布时间】:2022-02-19 01:49:28
【问题描述】:

我正在尝试按照本教程在 Azure 上的 Typescript 上部署 Express 服务器: https://docs.microsoft.com/en-us/azure/app-service/quickstart-nodejs?tabs=windows&pivots=development-environment-vscode

这是一个虚拟应用,在 index.ts 文件中包含一个简单的 Hello World。但是我面临很多问题。

这是我浏览网站时收到的消息: "您无权查看此目录或页面。"

当我尝试检查我部署的文件夹时,这是我得到的

所以没有 web.config 文件。但是,“SCM_DO_BUILD_DURING_DEPLOYMENT”参数设置为 true 并且应该生成它。

这是我的 package.json

{
  "name": "test-azure-3",
  "version": "1.0.0",
  "description": "",
  "main": "dist/index.js",
  "scripts": {
    "prebuild": "tslint -c tslint.json -p tsconfig.json --fix",
    "build": "tsc",
    "prestart": "npm run build",
    "start": "node .",
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "express": "^4.17.2"
  },
  "devDependencies": {
    "@types/express": "^4.17.13",
    "@types/node": "^17.0.14",
    "tslint": "^6.1.3",
    "typescript": "^4.5.5"
  }
}

还有我在 Azure 中的设置:

(看到 .Net 作为堆栈有点惊讶)

请随时询问更多信息!

编辑:正如 Felipe 提到的,我还为 dist 文件夹创建了一个特定的 Azure 项目,但我仍然有相同的行为

【问题讨论】:

  • 因为这是一个 Typescript 项目,你应该构建它来提升它。这将生成一个 index.js 文件,该文件将是您的应用程序的启动。您不应该在生产环境中运行 ts 文件。运行“nom run build”并生成这些文件(通常在“dist”文件夹中并测试然后运行“node index.js”以查看结果。
  • 我已经构建了它并且确实获得了 index.js 文件,但我希望生成 web.config 文件并以 dist 文件夹为目标。我也尝试部署 index.js 文件,但结果相同
  • web.config 文件是 IIS 专用的。节点与它没有任何关系。您必须自己构建此 web.config 才能使其在 IIS 上运行。实际上,您应该只部署 dist 文件夹中的内容。我在屏幕截图中看到您发送了项目的所有文件。
  • 如果您在 azure 上运行节点应用程序,您可能需要部署 dist 文件夹的内容,设置环境变量,这样就可以了。
  • 我用 dist 文件夹 deployement 编辑了我的帖子 “设置环境变量”是什么意思?

标签: typescript azure express deployment build


【解决方案1】:

浏览我们讨论的所有内容:

  1. web 配置仅与 IIS 相关。 NodeJS 与它无关;
  2. 您应该运行“npm run build”并仅在“dist”文件夹中发布文件。这将在根目录中生成一个 index.js 文件,该文件是节点将要查找的文件以运行您的应用程序。 .ts 文件不应在生产环境中执行;
  3. 将必要的环境变量添加到 Azure 上的“应用程序设置”。这将填充您的应用需要运行的变量。
  4. 您可能应该将变量 PORT 设置为 80,因为 Azure 可能希望在端口 80 上运行您的应用程序;

【讨论】:

  • 1.我使用 ExpressJs 应用程序(使用 javascript 而不是打字稿)进行了测试,它可以工作。那里会生成一个 web.config 文件。此外,天蓝色教程建议有一些。 2. 如何告诉 Azure 只部署 dist 文件夹?在我的 package.json 中?天青配置? 3. Azure 应用设置中需要哪些环境变量?我有 3 个(在我的第二个屏幕截图中) 4. 我还尝试将 Azure 变量中的端口更新为 80,它不起作用您还有其他想法吗? relly express typescript 是否与 Azure 兼容?
  • 2.你应该只将饮食文件夹提升到 Azure,否则你会暴露你的源代码。 3.只有你的应用程序需要的那些。我猜那是 PORT 和 NODE_ENV。如果您正在部署节点应用程序,我认为 .NET 不是您正在寻找的平台。改为选择 NodeJS; 4. Node 确实与 Azure 兼容,但您必须了解 typescript 是 javascript 的中间语言(这是 NodeJS 在 express 上运行的语言)。因此,不应将任何打字稿代码发送到生产环境。此外,packages.json 仅适用于开发环境。
  • 我遵循了所有这些步骤,但仍然无法正常工作,您是否能够重现 Express Typescript “Hello World”应用程序并将其成功部署到 Azure ?
  • 如果你告诉我在这种情况下什么是无效的,我将能够提供帮助。在我们讨论了如何部署这些文件之后,您能否在 azure 上发布您遇到的错误以及这些文件的结构?
【解决方案2】:

好的,所以我找到了一个解决方案,这可能不会取悦有麻烦的人。

对我有用的是离开 Azure 去 Heroku,它在几分钟内开始工作,但也更容易使用(至少对我来说)。

我找到了一个很好的教程: https://medium.com/developer-rants/deploying-typescript-node-js-applications-to-heroku-81dd75424ce0

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-02
    • 1970-01-01
    • 2021-09-04
    • 2016-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-06
    相关资源
    最近更新 更多