如何解决:当前平台上递归监视功能不可用,正在用于运行 Node.js

Posted

技术标签:

【中文标题】如何解决:当前平台上递归监视功能不可用,正在用于运行 Node.js【英文标题】:How to fix: The feature watch recursively is unavailable on the current platform, which is being used to run Node.js 【发布时间】:2020-08-31 12:25:47 【问题描述】:

我正在尝试在 docker 容器中运行 typescript express.js。运行 docker 后出现以下错误:

> ts-node-dev src/app.ts

Using ts-node version 8.10.1, typescript version 3.9.2
TypeError [ERR_FEATURE_UNAVAILABLE_ON_PLATFORM]: The feature watch recursively is unavailable on the current platform, which is being used to run Node.js
    at Object.watch (fs.js:1441:11)
    at add (/app/node_modules/filewatcher/index.js:74:34)
    at /app/node_modules/filewatcher/index.js:93:5
    at FSReqCallback.oncomplete (fs.js:176:5)

我的 Dockerfile:

FROM node:alpine

WORKDIR /app
COPY package.json .
RUN npm install
COPY . .

CMD ["npm","start"]

还有 package.json 文件:


  "name": "app-name",
  "version": "1.0.0",
  "description": "Init master",
  "main": "src/app.ts",
  "scripts": 
    "build": "./node_modules/.bin/tsc",
    "start": "ts-node-dev src/app.ts"
  ,
  "repository": 
    "type": "git",
    "url": "https://*****@dev.azure.com/********"
  ,
  "author": "",
  "license": "ISC",
  "dependencies": 
    "celebrate": "^12.1.1",
    "colors": "^1.4.0",
    "cors": "^2.8.5",
    "dotenv": "^8.2.0",
    "event-dispatch": "^0.4.1",
    "eventemitter3": "^4.0.0",
    "express": "^4.17.1",
    "helmet": "^3.22.0",
    "jsonwebtoken": "^8.5.1",
    "moment": "^2.25.3",
    "mongoose": "^5.9.13",
    "morgan": "^1.10.0",
    "ms": "^2.1.2",
    "pbkdf2": "^3.0.17",
    "redis": "^3.0.2",
    "reflect-metadata": "^0.1.13",
    "status-code-enum": "^1.0.0",
    "swagger-jsdoc": "^4.0.0",
    "swagger-ui-express": "^4.1.4",
    "ts-node": "^8.10.1",
    "typedi": "^0.8.0",
    "uuid": "^8.0.0",
    "winston": "^3.2.1"
  ,
  "devDependencies": 
    "@types/express": "^4.17.6",
    "@types/mongoose": "^5.7.16",
    "@types/node": "^13.13.5",
    "ts-node-dev": "^1.0.0-pre.44",
    "typescript": "^3.8.3"
  

附注我决定加入修复: 更改 Dockerfile:

FROM node:lts-alpine

并更改 package.json:

"start": "ts-node-dev src/app.ts --poll"

【问题讨论】:

【参考方案1】:

这个错误似乎是由node.js v14 引起的,使用这个命令来修复它:

ts-node-dev --poll src/app.ts

或者您可以使用其他版本的 node.js 而不是版本 14

【讨论】:

【参考方案2】:

Node v14 对 fs.watch() API 进行了重大更改,特别是 recursive 选项(Linux 从未支持过)now raises the ERR_FEATURE_UNAVAILABLE_ON_PLATFORM error if used on Linux。

错误报告和修复已提交至filewatcher:https://github.com/fgnass/filewatcher/pull/6

在合并该修复并发布新版本之前,您需要坚持使用 NodeJS filewatcher 包以包含该补丁。

【讨论】:

所以我通过使用停靠中的最新节点并将以下参数添加到开头来解决我的问题,ts-node-dev src/app.ts —poll 该 repo 中的最新提交是在 2016 年 :(

以上是关于如何解决:当前平台上递归监视功能不可用,正在用于运行 Node.js的主要内容,如果未能解决你的问题,请参考以下文章

如何建立一个完整可用的安全大数据平台

如何根据当前平台跳过 xUnit 中的特定测试

网络映射/设备上云EasyNTD登录管理平台出现异常,是什么原因?

青云QingCloud 统一运维平台 4.4 新版发布

BlazeRS 的哪些功能在当前的 Google App Engine 上不可用?

自动化运维工具之Zabbix服务器监控基本应用详解