【问题标题】:Not able to start sapper app in production mode无法在生产模式下启动 sapper 应用程序
【发布时间】:2023-03-22 22:26:01
【问题描述】:

正如标题所说,我无法在生产模式下启动我的工兵项目。当我运行npm run start 时,我会在控制台上得到这个输出:

niklas@Niklass-iMac project-name % npm run start

> apple-on-svelte@0.0.1 start /Users/niklas/path/to/project
> node __sapper__/build

Starting server on port 3000
niklas@Niklass-iMac project-name %

如您所见,命令立即中止,服务器未启动。可能是什么原因?

我的package.json 看起来像这样

{
    "name": "project name",
    "description": "description",
    "version": "0.0.1",
    "scripts": {
        "build": "sapper build --legacy",
        "deploy": "firebase deploy --only functions",
        "dev": "sapper dev",
        "export": "sapper export --legacy",
        "fb_start": "npm run shell",
        "logs": "firebase functions:log",
        "serve": "firebase emulators:start --only functions",
        "shell": "firebase functions:shell",
        "start": "node __sapper__/build"
    },
    "browserslist": [
        "last 3 version"
    ],
    "engines": {
        "node": "10"
    },
    "dependencies": {
        "compression": "^1.7.4",
        "express": "^4.17.1",
        "firebase-admin": "^8.10.0",
        "firebase-functions": "^3.6.0",
        "sirv": "^0.4.2"
    },
    "devDependencies": {
        "@babel/core": "^7.9.0",
        "@babel/plugin-syntax-dynamic-import": "^7.8.3",
        "@babel/plugin-transform-runtime": "^7.9.0",
        "@babel/preset-env": "^7.9.5",
        "@babel/runtime": "^7.9.2",
        "@fullhuman/postcss-purgecss": "^2.1.2",
        "@rollup/plugin-commonjs": "11.0.2",
        "@rollup/plugin-node-resolve": "^7.1.3",
        "@rollup/plugin-replace": "^2.3.1",
        "autoprefixer": "^9.7.6",
        "cssnano": "^4.1.10",
        "firebase-functions-test": "^0.2.0",
        "npm-run-all": "^4.1.5",
        "postcss": "^7.0.27",
        "postcss-import": "^12.0.1",
        "postcss-nested": "^4.2.1",
        "postcss-url": "^8.0.0",
        "rollup": "^2.6.1",
        "rollup-plugin-babel": "^4.4.0",
        "rollup-plugin-postcss": "^2.6.1",
        "rollup-plugin-svelte": "^5.2.1",
        "rollup-plugin-terser": "^5.3.0",
        "sapper": "^0.27.12",
        "svelte": "^3.20.1",
        "svelte-preprocess": "^3.7.1",
        "svelte-preprocess-postcss": "^1.1.1",
        "tailwindcss": "^1.2.0"
    }
}

而我的src/server.js 看起来像这样:

import sirv from "sirv";
import express from "express";
import compression from "compression";
import * as sapper from "@sapper/server";

import "./assets/global.css";

const { PORT, NODE_ENV } = process.env;
const dev = NODE_ENV === "development";

const expressServer = express().use(
    compression({ threshold: 0 }),
    sirv("static", { dev }),
    sapper.middleware()
);

if (dev) {
    expressServer.listen(PORT, (err) => {
        if (err) console.log("error", err);
    });
}

export { expressServer };

而我的index.js 看起来像这样:

const functions = require("firebase-functions");
const { expressServer } = require("./__sapper__/build/server/server");

exports.ssr = functions.https.onRequest(expressServer);

我在 macOS 10.15.5 上使用汇总和最新的节点 lts 版本 没有问题,我可以运行npm run devnpm run build,但不能运行npm run start

我该如何解决这个问题?有什么想法吗?

【问题讨论】:

  • 你能在 firebase 上运行它吗,我的 CSS 链接损坏了,你知道我该如何解决吗?

标签: javascript node.js express svelte sapper


【解决方案1】:

据我判断您的快递服务,当not 处于开发模式时,您似乎没有收听传入的连接。对此负责的确切代码是:

// only in dev mode you listen to inc connections
if (dev) { 
    expressServer.listen(PORT, (err) => {
        if (err) console.log("error", err);
    });
}

当您不处于开发模式时,这将跳过列表部分。 我会考虑将 if 语句移到您的监听回调函数中,例如:

expressServer.listen(PORT, (err) => {
    if (err && dev) console.log("error", err);
});

这应该保持服务器运行并列出未来的连接。如果这对你有帮助,请给我一个小拇指。有关更多信息,我还向您推荐expressJS 的快速入门指南

【讨论】:

  • 感谢它现在可以使用 ? 但是为什么它可以在 Firebase 上使用呢?你能解释一下吗?该应用程序也作为 Nodejs 应用程序运行
  • 我不太了解 firebase,但也许他们也将环境变量 NODE_ENV 设置为开发,具体取决于您部署服务的方式?
猜你喜欢
  • 1970-01-01
  • 2016-09-18
  • 2015-05-10
  • 1970-01-01
  • 2019-01-16
  • 2020-01-24
  • 1970-01-01
  • 2018-10-11
相关资源
最近更新 更多