Использование сборки Svelte с сервером узла Sails - PullRequest
0 голосов
/ 18 июня 2020

Я пытаюсь создать веб-сайт с помощью Svelte для внешнего интерфейса и Sails для внутреннего интерфейса. Моя проблема в том, что я не могу отобразить свою сборку Svelte publi c в качестве веб-страницы по умолчанию для Sails. Я хочу сохранить организацию ниже (или, может быть, что-то подобное) и иметь мою страницу сборки Svelte publi c, когда я go на 'http://myserver: 1337 ' вместо стандартной страницы Sails: файловая организация

PS: Я использую Node: v14.4.0, Sails: v1.2.4 и Svelte: v6.14.5. Всем спасибо :)

Ответы [ 2 ]

0 голосов
/ 19 июня 2020

Спасибо за ваш ответ, это помогает мне понять, как это работает. Прошу прощения, но я не следовал в точности вашему руководству (потому что не мог понять, что мне нужно было делать;)). Я редактирую rollup.config. js как:

import svelte from 'rollup-plugin-svelte';
import resolve from '@rollup/plugin-node-resolve';
import commonjs from '@rollup/plugin-commonjs';
import livereload from 'rollup-plugin-livereload';
import { terser } from 'rollup-plugin-terser';

const production = !process.env.ROLLUP_WATCH;
const BUILD_PATH = '../server/assets';

export default {
    input: 'src/main.js',
    output: {
        sourcemap: true,
        format: 'iife',
        name: 'app',
        file: `${BUILD_PATH}/build/bundle.js`
    },
    plugins: [
        svelte({
            // enable run-time checks when not in production
            dev: !production,
            // we'll extract any component CSS out into
            // a separate file - better for performance
            css: css => {
                css.write(`${BUILD_PATH}/build/bundle.css`);
            }
        }),

        // If you have external dependencies installed from
        // npm, you'll most likely need these plugins. In
        // some cases you'll need additional configuration -
        // consult the documentation for details:
        // https://github.com/rollup/plugins/tree/master/packages/commonjs
        resolve({
            browser: true,
            dedupe: ['svelte']
        }),
        commonjs(),

        // In dev mode, call `npm run start` once
        // the bundle has been generated
        !production && serve(),

        // Watch the `public` directory and refresh the
        // browser on changes when not in production
        !production && livereload(BUILD_PATH),

        // If we're building for production (npm run build
        // instead of npm run dev), minify
        production && terser()
    ],
    watch: {
        clearScreen: false
    }
};

function serve() {
    let started = false;

    return {
        writeBundle() {
            if (!started) {
                started = true;

                require('child_process').spawn('npm', ['run', 'start', '--', '--dev'], {
                    stdio: ['ignore', 'inherit', 'inherit'],
                    shell: true
                });
            }
        }
    };
}

И я перемещаю свои файлы, это активы как: файловая организация

Затем я удалил домашнюю страницу .e js в server / views / pages /

И работает :)! Еще раз спасибо за быстрый ответ

0 голосов
/ 19 июня 2020

Вы можете попробовать что-то вроде:

  1. Скомпилировать Svelt для сборки в каталог / publi c на Sails. js.

Откройте накопительный пакет. config. js и измените путь к вашим public / build / bundle. js и public / build.bundle. css на путь publi c sails, то есть "../server/public ... ".

Настройте /task/pipeline.js для включения скомпилированных файлов js и css:
// tasks/pipeline.js

var cssFilesToInject = [
  'css/**/global.css',
  'css/**/bundle.css',
  'css/**/*.css',
];

var jsFilesToInject = [
  'js/**/bundle.js',
  'js/**/*.js'
];
Создайте контроллер для загрузки индексного файла:
// router.js

'/*': { action: 'index', skipAssets: true, skipRegex: /^\/api\/.*$/ },

Исключенные маршруты «/ api» позволяют настраивать маршруты CRUD.

Контроллер индекса:

module.exports = {
  friendlyName: 'View homepage',
  description: 'Display a compiled index page',
  exits: {
    success: {
      statusCode: 200,
      viewTemplatePath: 'pages/index'
    },
  },
  fn: async function () {
    return {};
  }
};

И на страницу индекса вы можете включить индекс шаблона. html или создать свой собственный index.e js для загрузки статистики c содержимое, то же, что вы настроили ранее:

// views/templates/template.ejs

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset='utf-8'>
    <meta name='viewport' content='width=device-width,initial-scale=1'>

    <title>Svelte app</title>

    <link rel='icon' type='image/png' href='/favicon.png'>
    <!--STYLES-->
    <!--STYLES END-->
</head>

<body>
<!--TEMPLATES-->
<!--TEMPLATES END-->
<%- body %>
<!-- exposeLocalsToBrowser ( ) %>
<!--SCRIPTS-->
<!--SCRIPTS END-->
</body>
</html>

И index.e js:

// views/pages/index.ejs

<!-- Nothing here I mean -->
...