【问题标题】:node.js on production server生产服务器上的 node.js
【发布时间】:2017-08-31 16:46:36
【问题描述】:

我在 angular2 中编写了一个网站,并在 AWS 服务器上部署了 dist 文件夹(使用 webpack 编译后)。网站工作得很好。现在我想知道为什么?因为我没有在服务器上安装 node.js 也没有部署 node_modules 文件夹,而不是网站运行得很好。在我的 VS 代码中,我必须使用 npm 下载包,但在服务器上,不存在包。请解释。这听起来可能是一个奇怪的问题,但我真的很困惑或者缺少一些基础知识。

【问题讨论】:

    标签: node.js angular webpack


    【解决方案1】:

    实际上,当您通过运行类似于 npm run build:prod 的命令创建分发文件夹时,您的所有代码(包括所需的包和库)都被压缩为最终部署到服务器的缩小文件。所以你的所有 node_modules 仍然是 dist 文件夹中代码的一部分。

    【讨论】:

    • 我们在 dist 文件夹中获得了 5 个文件,但似乎 inline.js 是加载其余文件的文件。在查看文件中的代码后,这个内联文件似乎需要 webpack。你能不能给它一些亮点?因为 webpack 甚至不在产品服务器上。
    • @user2225263 我刚刚在这篇文章上评论了另一个答案,以使其对您更具描述性☺️
    【解决方案2】:

    Angular 不在服务器上运行,而是在客户端上运行。

    服务器只是将文件发送给客户端,因此它们可以运行。

    因此,您真的不需要在服务器上安装任何东西。它只是用于传递文件。

    编辑:我想值得一提的是,服务器上可能会发生一些 tansile/compile/pack 步骤,以通过客户端 javascript 制作分发包 readable

    【讨论】:

    • 舒贾·艾哈迈德谢谢
    【解决方案3】:

    以下是运行 npm run build:prod 后创建的文件的完整细分:

    1. dist/main.[hash].bundle.js 捆绑您的应用程序。
    2. dist/vendor.[hash].bundle.js 你的依赖(@angular, RxJS...)捆绑
    3. dist/polyfill.[hash].bundle.js 捆绑了 polyfill 依赖项(@angular、RxJS...)。
    4. dist/index.html 应用程序的入口点。
    5. dist/inline.[hash].bundle.js webpack 加载器
    6. dist/style.[hash].bundle.css 样式定义
    7. dist/assetsresources 从 Angular CLI 资产配置中复制。

    【讨论】:

    • 谢谢。我实际上在我的 dist 中看到了这些文件,并且我理解除了 webpack 加载器之外的每个文件。可能是我对 webpack 的了解没有达到标准,但是当我打开并看到 inline.js 文件时,我确实看到了一个像 jquery 一样的 IIFE,但是它是如何加载所有模块的,以及它为什么没有像代码那样的依赖关系不像 jQuery 那样看起来像普通的 javascript 代码。
    • 这就是任何加载器的工作方式,将您的依赖项压缩成小块,以便部署在生产服务器上。尝试使用谷歌搜索加载器和 webpack 加载器,以了解更多关于这些加载器如何工作的信息。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-13
    • 2014-05-16
    • 2012-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多