使用 --watch 标志时,Node-sass 将不起作用

Node-sass won't work when using the --watch flag

我在 运行ning node-sass 时使用“--watch”或“-w”标志时遇到问题。我已经将 node-sass 安装为 devDependency 并为我指定了一个脚本到 运行 node-sass。问题是,当我 运行 没有任何标志的脚本一切正常并且 SCSS 代码被编译时,但是当我添加“--watch”标志时,它甚至不会编译初始代码,也不会它检测任何文件更改。我做了很多研究,但一无所获。我将把脚本留在下面,我很乐意提供任何其他可能有助于解决此问题的信息。

里面package.json:

"scripts": {
    "compile:sass": "node-sass sass/main.scss css/style.css"
 }

当我 运行 npm run compile:sass 并且我得到这个输出时,这工作正常:

natours@1.0.0 compile:sass /Users/lucabarcelos/WebstormProjects/AdvancedCSS/Natours
node-sass sass/main.scss css/style.css

Rendering Complete, saving .css file...
Wrote CSS to /Users/lucabarcelos/WebstormProjects/AdvancedCSS/Natours/css/style.css

但是当我将脚本更改为:

"scripts": {
    "compile:sass": "node-sass sass/main.scss css/style.css -w"
}

我得到这个输出:

natours@1.0.0 compile:sass /Users/lucabarcelos/WebstormProjects/AdvancedCSS/Natours
node-sass sass/main.scss css/style.css -w

它一直在等待文件更改,但当我实际更改某些内容时,什么也没有发生。

我在做同样的 natours 时遇到了同样的问题 ;-) 课程。跟node-sass.

的版本有关

npm uninstall node-sass --save-dev

然后安装 4.5.3 版;

npm install node-sass@4.5.3 --save-dev.

如果这不起作用,请查看 https://github.com/jonasschmedtmann/advanced-css-course/blob/master/npm-fixes.md

我遇到了完全相同的问题(也在做 natours 项目时:)),none 上述解决方案对我有用。我还尝试了 onchange 文件观察器,但也没有成功。如果其他人在观看 .scss 文件时遇到同样的问题,我 post 这里是我的解决方案。 最终成功的是 chokidar 和 node-sass(node-sass-chokidar). I followed this tutorial 的组合,它有一个关于如何进行设置的分步指南,最后,它起作用了!唯一的事情我所做的不同之处在于我使用了 -D 标志,以便将其保存为 devDependency,并且也没有使用 -o 标志,因为输出目标文件已经存在。

我用过:

npm i node-sass-chokidar -D

然后

npm i autoprefixer chokidar-cli npm-run-all postcss-cli -D

我的脚本

"scripts": {
    "build-task:scss-compile": "node-sass-chokidar --source-map true sass/main.scss  css/style.css",
    "build-task:autoprefixer": "postcss css/*.css --use autoprefixer -d css",
    "sass:build": "npm-run-all -p build-task:*",
    "sass:watch": "chokidar 'sass/**/*.scss' -c 'npm run sass:build'",
    "dev": "npm-run-all -p sass:*"
  }

然后您可以 运行 npm run devnpm run sass:watch.

这是我的解决方案:

  1. 从 npm 安装 gaze npm install gaze -D
  2. 创建一个新的JavaScript文件并使用gaze观看sass文件 进行更改并使用 exec 方法执行所需的命令 child_process nodejs自带的库

我在 package.json 文件中的脚本 属性 中添加了一个脚本。

"sass:compile": "node-sass [your-input-src] [your-output-dest]"

watch.js 文件:

const gaze = require("gaze");
const { exec } = require("child_process");

// Command to run in terminal
const COMMAND = "npm run sass:compile";

// takes the command and uses 'exec' to execute it in
// a terminal (shell)
function cmd(command) {
  exec(command, (err, stdout, stderr) => {
    if (err) {
      console.log("error: ", err);
      return;
    }
    if (stderr) {
      console.log("stderr: ", stderr);
      return;
    }
    console.log("stdout: ", stdout);
  });
}

gaze("sass/*.scss", (err, watcher) => {
  if (err) {
    console.log(err);
    return;
  }

  // Watched files
  const files = watcher.watched();
  console.log("Watching these files: ", files);
  
  // Gaze emits four events (changed, added, deleted, all)
  // listen to the ones you want
  watcher.on("changed", (filePath) => {
    console.log(filePath, "file changed.");
    cmd(COMMAND);
  });

  watcher.on("added", (filePath) => {
    console.log("File: ", filePath, "was added.");
  });

  watcher.on("deleted", (filePath) => {
    console.log(filePath, "was deleted.");
  });

  watcher.on("all", (event, filePath) => {
    console.log("All: ", filePath, " was ", event);
  });
});

查看凝视库文档以获取更多信息。 https://github.com/shama/gaze