• Объясните структуру веб-сервера на node js и socket.io?

    TTATPuOT
    @TTATPuOT
    https://code.patriotovsky.ru/
    1. Epxress от Nginx отличается главным образом тем, что первый - это сервер для Node.js приложений, а второй для Linux. Вы можете не использовать Express, или не использовать Nginx. По отдельности эти технологии так же будут работать. Чаще всего, ставят связку Nginx + Express для упрощения администрирования нескольких сайтов на одном VPS. Nginx отвечает за внешний роутинг при обращению к сайту, он передаёт запрос нужному Node.js приложению (и не обязательно это должен быть Node.js + Express). А дальше уже Express разбирается с запросом и выполняет бизнес-логику.

    2. По большому счёту, в такой связке проще всего воспринимать Socket.io как расширение для Express, добавляющее поддержку сокетов. Технически, Socket.io не нуждается в Express и может работать на любом другом сервере. Но так как вы задействуете Express, запрос проходит сначала в него, а дальше управление передаётся в Socket.io. Если вас интересует более глубокое погружение - то лучше всего читать документацию Socket.io и смотреть, как работает он.

    3. https://socket.io/get-started/ https://socket.io/docs/v4/server-initialization/#w... - у Socket.io прекрасная документация, которая на примерах показывает различные варианты использования.
    Ответ написан
    1 комментарий
  • Как node/create-react-app подключает пакет npm sass?

    daniel_pr
    @daniel_pr
    Мне этого не нужно было делать, потому что я использовал create-react-app, в конфиге вебпака которого уже произведена настройка sass?

    Да.

    Если п1 верный, то как в таком случае это реализовано? Я ведь мог установить не sass, а node-sass или dart-sass или любую другую библиотеку?

    Примерно так:

    const fs = require("fs");
    
    function modulesHasOneOf(moduleNames) {
      return moduleNames.some(name => {
        const modulePath = require.resolve(name);
        return fs.existsSync(modulePath);
      });
    }
    
    const isSassInstalled = modulesHasOneOf(["sass", "dart-sass", "node-sass"]);
    
    const webpackConfig = {
      ...
      module: {
        rules: [
          {
             test: isSassInstalled ? /\.scss$/ : /\.css$/,
             use: ["css-loader", isSassInstalled && "sass-loader"].filter(Boolean)
          }
        ]
      }
    };


    UPD:
    Все оказалось проще:

    const config = {
        module: {
          rules: [
            {
              test: /\.css$/,
              use: ["css-loader"]
            },
            {
              test: /\.s(a|c)ss$/,
              use: ["css-loader", "sass-loader"]
            }
          ]
        }
      };

    И уже в зависимости от расширения файла выбирает то или иное правило. Главное, да, просто поставить пакет (dart-,node-)sass.

    https://github.com/facebook/create-react-app/blob/...
    Ответ написан
    4 комментария