Chokidar 没有获取 docker 容器内的文件更改

Jam*_*ush 5 node.js docker docker-compose

我正在使用 docker for mac 版本 1.12.0-rc2 进行 React 项目。我的工作流程是这样的:

  1. src/OS X 上的文件夹已安装到容器中
  2. 当开发人员修改其中的文件时,src/它会被转换为 ES5 并放入其中public/(这是有效的)。
  3. 当另一个观察程序中的文件发生更改时,public/会触发热重新加载(在我的本地主机上有效,但在容器中无效)。

这是我的步骤 3 中的步数观察器代码:

// root = "/src"
const watcher = chokidar.watch(root, {
    usePolling: true,
    awaitWriteFinish: {
        pollInterval: 100,
        stabilityThreshold: 250
    },
    ignored: /\.(git|gz|map)|node_modules|jspm_packages|src/,
    ignoreInitial: true,
    persistent: true
})
    .on("change", function fileWatcher(filename) {
        const modulePath = filename.replace(`${root}/`, "");

        wss.clients.forEach(function sendFileChange(client) {
            send("filechange", modulePath, client);
        });

        if (cache[filename]) {
            wss.clients.forEach(function sendCacheFlush(client) {
                send("cacheflush", filename, client);
            });

            delete cache[filename];
        }
    });
Run Code Online (Sandbox Code Playgroud)

我的 docker-compose.yml 文件:

version: '2'

services:
  wildcat:
    build:
      context: .
      args:
        JSPM_GITHUB_AUTH_TOKEN:
    image: "nfl/react-wildcat-example:latest"
    environment:
      NODE_ENV: development
      PORT: 3000
      STATIC_PORT: 4000
      COVERAGE:
      LOG_LEVEL:
      NODE_TLS_REJECT_UNAUTHORIZED: 0
      CHOKIDAR_USEPOLLING: 'true'
    volumes:
      - ./src:/src/src
      - ./api:/src/api
    ports:
      - "3000:3000"
      - "4000:4000"
    ulimits:
      nproc: 65535
    entrypoint: "npm run"
    command: "dev"
Run Code Online (Sandbox Code Playgroud)

Jam*_*ush 5

花了一两天后,我发现了这个问题,即:

ignored: /\.(git|gz|map)|node_modules|jspm_packages|src/,
Run Code Online (Sandbox Code Playgroud)

导致 chokidar 忽略/src我将所有源代码复制到 docker 容器中的文件夹。我将 Dockerfile 和 docker-compose.yml 中的此路径更改为/code相反,一切都按预期工作。