Смотреть SASS / SCSS и nodemon вместе

Я хочу запустить Nodemon и node-sass watcher вместе.

Я попробовал выполнить следующий сценарий в файле package.json.

"build-css": "node-sass --include-path scss scss/main.scss public/css/main.css",
"watch-css": "nodemon -e scss -x \"npm run build-css & nodemon server.js\""

и devDependencies:

"devDependencies": {
    "node-sass": "^4.9.0",
    "nodemon": "^1.17.5"
},

Это работает, но мой вопрос в том, что если я не добавлю & nodemon server.js в сценарий watch-css, он не запустит сервер и веб-приложение.

Есть ли для этого хорошее решение?

Спасибо.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
1 653
3

Ответы 3

Хорошо, у меня так много сейчас, я дам ответ вместо этого, но я думаю, что вопрос очень открытый! Я думаю, вам все равно придется что-то менять в зависимости от требований. В принципе, если это сработает, не беспокойтесь об этом.

Существуют различные решения, такие как npm-run-all или одновременно, но я думаю, что третий скрипт, такой как "run-both": "npm run build-css & npm run watch-css", в большинстве случаев подойдет, если вы помните, что & не является кроссплатформенным или даже кросс-шелл (например, Windows cmd vs powershell). Поэтому я бы сказал, что если вы работаете в команде, вероятно, будет проще просто добавить еще одну dev-зависимость.

Но я подскажу pm2, который, на мой взгляд, отлично работает как в производстве, так и в разработке. Экосистемные файлы особенно полезны. Я также думаю, что pm2 полностью заменяет nodemon. Не то чтобы nodemon плохой, но pm2 отлично подходит для нескольких процессов. Вот некоторые из моих сценариев npm:

"winsrv": "pm2 flush & pm2 reload server/ecosystem-win.json & pm2 logs", 
"winprod": "webpack --config ./webpack.config.js & npm run winsrv",
"windev": "set NODE_ENV=development webpack --config webpack.dev.config.js"

И в заключение я добавлю, что хуки post / pre в сценариях npm очень полезны. Выполните одну команду для трех скриптов:

"preprod": "./preprod.sh", // Makes backup of old files, changes symlink to the backup
"prod": "webpack --config ./webpack.config.js && pm2 flush && pm2 reload server/ecosystem-production.json",
"postprod": "./postprod.sh", // check files exist and relinks public to the new build

Извините за задержку, я отвлекся и наткнулся на некоторые препятствия.

Я решил попробовать программный api node-sass, я не уверен, насколько это было умно, но кое-что я узнал.

buildcss.js:

var sass = require("node-sass");
var fs = require("fs");
sass.render({file: "styles.scss"}, (err, results) => {
  if (err) { console.info(err); }
  fs.writeFile("styles.css", results.css, err => console.info);
  console.info('scss -> css complete!');
});

Поддельный server.js

console.info("server.js...");
setInterval(function() {
  console.info("interval that prevents our so called server from exiting" );
}, 1000 * 60 * 60);

экосистема.json (перезапускает scss-скрипт при изменении. хм ...)

{
  "apps": [
    {
      "name": "My Server",
      "script": "server.js",
      "watch" : ["server.js"]
    },
    {
      "name": "SCSS to CSS",
      "script": "buildcss.js",
      "watch": ["styles.scss"],
      "autorestart": false
    }
  ]
}

И package.json

...
"scripts": {
    "start": "pm2 logs && pm2 reload ecosystem.json && pm2 logs --out"
},

npm start

И я хотел бы добавить, что я обычно обрабатываю свою scss-компиляцию через webpack и не могу говорить о процессе, используемом здесь (но, похоже, он работает достаточно хорошо!).

Спасибо за помощь. pm2: Я установил pm2 и создал файл конфигурации pm2 экосистема простая. Я добавил следующую конфигурацию в файл config.js: module.exports = { apps : [{ name: "app1", script: "./app.js", watch: true }, { name: "sass-build", script: "node-sass --include-path scss scss/main.scss public/css/main.css", watch: true } ] } У меня ошибка [PM2] [ERROR] скрипт не найден. Я не очень знаю, как настроить файл конфигурации pm2.

metalz 16.06.2018 12:48

Я думаю, что это должно быть о том, откуда вы запускаете скрипт. Вы можете добавить "cwd": "/ absolute / path", чтобы он не имел отношения к тому, где вы запускаете pm2 start.

ippi 16.06.2018 12:56
pm2 start script.js (то же, что и nodemon, но чтобы увидеть результат, вам нужно выполнить pm2 logs или pm2 logs <id>) pm2 ls показывает запущенные процессы, pm2 stop <id> останавливается. Это важные. После этого вы можете беспокоиться об экосистеме, которая на самом деле является только способом начать pm2 с конфигурацией (какие файлы смотреть и т. д.)
ippi 16.06.2018 13:02

Итак, большая разница с nodemon в том, что pm2 всегда помещает ваши данные в фоновый режим.

ippi 16.06.2018 13:03

Прохладный. Не могли бы вы привести мне пример того, как выглядит код или как поместить сценарий сборки scss в css в файл package.json?

metalz 16.06.2018 13:37

Большое спасибо за Вашу помощь. Я выполнил твою инструкцию. Я получил концепцию от этого и применил ее следующим образом, что сработало для меня:

buildcss.js (в корневом каталоге):

const sass = require('node-sass');
const fs = require('fs');
const path = require('path');

var path_style = path.resolve(__dirname, "scss")
var path_dist = path.resolve(__dirname, "public")

sass.render({file: path.join(path_style, '/main.scss')}, function (err, results) {
    if (err){
        console.info(err);
    }
    fs.writeFile(path.join(path_dist, '/css/main.css'), results.css, function (err) {
        console.info(err);
    });
   console.info('scss --> css completed.');
});

экосистема.json (в корне):

{
  "apps" : [
    {
      "name": "My App",
      "script": "app.js",
      "watch": ["app.js"]
    },
    {
      "name": "SCSS to CSS",
      "script": "buildcss.js",
      "watch": ["./scss/main.scss"]
    }
  ]
}

И package.json:

  "scripts": {
    "start": "pm2 start ecosystem.json && pm2 logs --out"
  },

Согласно вашему коду на package.json, "start": "pm2 logs && pm2 reload ecosystem.json && pm2 logs --out", у меня это не сработало. Произошла следующая ошибка:

[TAILING] Tailing last 15 lines for [all] processes (change the value with --lines option)
[PM2][ERROR] No file to stream for app [all], exiting.npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! [email protected] start: `pm2 logs && pm2 reload ecosystem.json && pm2 logs --out`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the [email protected] start script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

Из файла журнала:

12 info lifecycle [email protected]~start: Failed to exec start script

package.js
-e - список расширений
https://www.npmjs.com/package/nodemon

"scripts": {
  "start": "nodemon app.js -e js,scss,pug"
},

app.js
https://www.npmjs.com/package/node-sass

var result = sass.renderSync({
  file: scss_filename,
  [, options..]
});

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