我正在使用Express JS和EJS View 引擎开发一个Web应用程序,它将部署在AWS Amplify上。一切都可以在localhost上正常工作,但是当我在Amplify上部署静态文件(css,js)时存在问题。此问题的详细信息如下所述:
1.问题描述:

  • 在Amplify上,网站(/ index)的根路径工作正常,并且已加载静态文件
    ___.amplifyapp.com/
  • 但是当我转到其他路径(例如,/ register)时,它无法加载静态文件___.amplifyapp.com/register
  • 我注意到在加载静态文件时,路径名已自动添加到静态文件的所有路径中(在本例中,添加了/register:真正的路径将是https://myuser.amplifyapp.com/global/js/Base.js/而不是https://myuser.amplifyapp.com/register/global/js/Base.js/)

  • 2.我的源代码结构如下:
    |   app.js
    |   package-lock.json
    |   package.json
    +---bin
    +---dist
    |   |   app.js
    |   |   error.ejs
    |   |   index.html
    |   |   package.json
    |   |   register.ejs
    |   |   verify.ejs
    |   +---assets
    |   +---global
    |   +---javascripts
    +---node_modules
    +---public
    |   +---assets
    |   +---global
    |   +---javascripts
    |   index.html
    +---routes
    \---views
    
  • 在app.js中,我已经为'public'设置了静态文件夹:

  • app.use(express.static(path.join(__dirname, 'public')));
    
  • 在register.ejs中,我目前将链接设置为静态文件,如下所示:

  • <link rel="stylesheet" href="global/vendor/animsition/animsition.css">
    <script src="global/vendor/animsition/animsition.js"></script>
    
  • 我在package.json中设置的构建命令(它将复制所有必需的文件和文件夹以进行部署):

  • "build": "del-cli dist && mkdir dist && ncp public dist && ncp views dist && copyfiles app.js dist && copyfiles package.json dist"
    
  • 我通过创建应用程序并将其连接到Github存储库,使用Github存储我的源代码并使用AWS Amplify Console部署我的应用程序。这种方法允许我在进行更改并推送到Github时始终重新部署我的应用程序。 amplify.yaml中的配置为:

  • frontend:
      phases:
        preBuild:
          commands:
            - npm ci
        build:
          commands:
            - npm run build
      artifacts:
        baseDirectory: dist
        files:
          - '**/*'
      cache:
        paths:
          - node_modules/**/*
    
    3.我尝试过的操作:我已经阅读了stackorverflow中的很多问题,并遵循了他们的建议,但是没有任何效果。
  • 我已经尝试将'/''../'添加到静态文件的链接中:

  • <link rel="stylesheet" href="/global/vendor/animsition/animsition.css">
    <script src="/global/vendor/animsition/animsition.js"></script>
    
  • 我尝试通过this post
  • 提到的特定路径
  • 我还尝试为公共(public)文件夹(例如 Assets ,全局文件夹)设置静态,但没有更好的
  • 我还将所有 View 从views文件夹移到了公用文件夹,并更改了源代码中的views设置,但结果仍然相同:在localhost中一切正常,但是在部署到AWS Amplify时失败。

  • 如何解决此问题?您的任何建议,我将不胜感激。非常感谢!

    最佳答案

    AWS Amplify是静态网络托管服务(仅前端),不适用于nodejs + ejs。
    这表示您无法使用express进行放大,而无法创建具有特定端口号的服务器,但是放大允许您使用express来构建REST api,而不渲染页面。
    我认为您应该将网站放入EC2,而不是放大。
    你可以看看Amplify faqs

    07-24 09:49
    查看更多