Развертывание now-cli не создает зависимости package.json

Я пытаюсь развернуть приложение, созданное Sapper, через @now-node, Задача состоит в том, чтобы развернуть сервер Polka с зависимостями и статически обслуживать статические / и клиентские / файлы. Мне удалось включить файлы, которые Lambda требует через includeFiles, но теперь я вижу в журналах, что сборщик игнорирует зависимости, описанные в package.json. Точное сообщение

Starting server on port 3000
Cannot find module 'sirv'
Did you forget to add it to "dependencies" in `package.json`?

Но я вижу в журнале сборки, что зависимости не собраны. Обе package.json а также package-lock.json присутствуют в исходных файлах.

Буду признателен за любые советы о том, как подойти к этому.

Конфигурация now.json, к которой я пришел, выглядит следующим образом:

{
    "version": 2,
    "name": "experimental-sapper",
    "builds": [
        {
            "src": "__sapper__/build/index.js",
            "use": "@now/node",
            "config": {
                "includeFiles": [
                    "../build/**",
                    "../../static/**"
                    ]
            }
        },
        {
            "src": "static/**",
            "use": "@now/static"
        },
        {
            "src": "__sapper__/build/client/**",
            "use": "@now/static"
        }
    ],
    "routes": [
        { "src": "/(.*(\\.css)|(\\.json)|(\\.png))", "dest": "/static/$1" },
        { "src": "/client/(.*)", "dest": "/__sapper__/build/client/$1" },
        { "src": "/(.*)", "dest": "/__sapper__/build/index.js" }
    ],
    "alias": "..."
}

И src/server.js выглядит следующим образом (до объединения Rollup):

import sirv from 'sirv';
import polka from 'polka';
import compression from 'compression';
import * as sapper from '@sapper/server';
const { PORT, NODE_ENV } = process.env;
const dev = NODE_ENV === 'development';
const app = polka() // You can also use Express
    .use(compression({ threshold: 0 }));
if (dev) {
    app.use(sirv('static', { dev }));
}
app.use(sapper.middleware())
    .listen(PORT, err => {
        if (err) console.log('error', err);
    });
export default app.handler;

Тогда package.json также довольно стандартный:

  "description": "TODO",
  "version": "0.0.1",
  "scripts": {
    "dev": "sapper dev",
    "build": "sapper build --legacy",
    "export": "sapper export --legacy",
    "start": "node __sapper__/build",
    "cy:run": "cypress run",
    "cy:open": "cypress open",
    "test": "run-p --race dev cy:run"
  },
  "dependencies": {
    "compression": "^1.7.1",
    "express": "^4.17.1",
    "polka": "^0.5.0",
    "postcss-define-property": "^0.5.0",
    "sirv": "^0.4.0"
  },
  "devDependencies": {
    ...
  },
  "browserslist": "last 2 versions"
}

Заранее спасибо!

0 ответов

Для всех, кто сталкивается с этим вопросом, решение состоит в том, чтобы использовать now-sapperстроитель на https://www.npmjs.com/package/now-sapper

На сайте есть инструкции, но, по сути, вам нужно экспортировать обработчик, как указано выше, а затем позволить сборщику сделать все остальное. Сейчас есть несколько тонкостей, которые означают, что построитель узлов не будет работать в одиночку.

Ваша текущая конфигурация должна выглядеть так:

{
  "version": 2,
  "builds": [
    {
      "src": "package.json",
      "use": "now-sapper"
    }
  ]
}

Существует демонстрационный проект, связанный с README, который является базовым шаблоном Sapper с необходимой конфигурацией now.

Примечание для экспортированных приложений, @now/static будет достаточно.

Другие вопросы по тегам