运行 Angular 2 快速入门时解决或修复 Linux 上的 NPM lite-server 错误

Posted

技术标签:

【中文标题】运行 Angular 2 快速入门时解决或修复 Linux 上的 NPM lite-server 错误【英文标题】:Work Around or Fix for NPM lite-server on Linux error when running Angular 2 Quick Start 【发布时间】:2016-06-01 11:31:27 【问题描述】:

我无法在 Ubuntu 14.04 上使用 npm 启动 lite-server 2.1.0。我正在尝试运行 Angular2 快速入门示例。

此问题可能是 Linux 特有的,并且仅在最近更新 Ubuntu 后才开始出现。我能够在 Windows 8.1 上成功运行 Angular2 快速入门。我尝试了各种不同版本的 NPM 和 Node,但结果没有变化。运行 Angular Heroes 示例也因同样的问题而失败。

任何解决方案或临时解决方法将不胜感激。

成功将 typescript 转换为 javascript 后,尝试通过 npm 启动 lite-server 的结果如下:

npm run lite

events.js:154
      throw er; // Unhandled 'error' event
      ^

Error: watch node_modules/insight/node_modules/lodash/internal/baseForOwnRight.js ENOSPC
    at exports._errnoException (util.js:856:11)
    at FSWatcher.start (fs.js:1313:19)
    at Object.fs.watch (fs.js:1341:11)
    at createFsWatchInstance (/tf/sbtf/ang2-reg/node_modules/chokidar/lib/nodefs-handler.js:37:15)
    at setFsWatchListener (/tf/sbtf/ang2-reg/node_modules/chokidar/lib/nodefs-handler.js:80:15)
    at FSWatcher.NodeFsHandler._watchWithNodeFs (/tf/sbtf/ang2-reg/node_modules/chokidar/lib/nodefs-handler.js:228:14)
    at FSWatcher.NodeFsHandler._handleFile (/tf/sbtf/ang2-reg/node_modules/chokidar/lib/nodefs-handler.js:255:21)
    at FSWatcher.<anonymous> (/tf/sbtf/ang2-reg/node_modules/chokidar/lib/nodefs-handler.js:473:21)
    at FSReqWrap.oncomplete (fs.js:82:15)

npm ERR! Linux 3.19.0-49-generic
npm ERR! argv "/tf/node/bin/node" "/tf/node/bin/npm" "run" "lite"
npm ERR! node v5.6.0
npm ERR! npm  v3.7.2
npm ERR! code ELIFECYCLE
npm ERR! ang2-reg@1.0.0 lite: `lite-server`
npm ERR! Exit status 1

这是 package.json。我确实将 lite-server 升级到 2.1.0 看看是否有帮助,但没有。


  "name": "ang2-reg",
  "version": "1.0.0",
  "scripts": 
    "postinstall": "npm run typings install",
    "tsc": "tsc",
    "tsc:w": "tsc -w",
    "lite": "lite-server",
    "start": "concurrent \"npm run tsc:w\" \"npm run lite\" ",
    "typings" : "typings"
  ,
 "license": "ISC",
 "dependencies": 
    "angular2": "2.0.0-beta.6",
    "bootstrap": "^3.3.6",
    "systemjs": "0.19.20",
    "es6-promise": "^3.0.2",
    "es6-shim": "^0.33.3",
    "reflect-metadata": "0.1.2",
    "rxjs": "5.0.0-beta.0",
    "systemjs": "0.19.17",
    "zone.js": "0.5.14"
  ,
  "devDependencies": 
    "concurrently": "^1.0.0",
    "lite-server": "^2.1.0",
    "typescript": "^1.8.0",
    "typings":"^0.6.8"
  

这是打字稿配置:


  "compilerOptions": 
    "target": "es5",
    "module": "system",
    "moduleResolution": "node",
    "sourceMap": true,
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "removeComments": false,
    "noImplicitAny": false
  ,
  "exclude": [
    "node_modules",
    "typings/main",
    "typings/main.d.ts"
  ]

这是来自 npm-debug.log 的错误消息部分:

10 verbose lifecycle ang2-reg@1.0.0~lite: CWD: /tf/sbtf/ang2-reg
11 silly lifecycle ang2-reg@1.0.0~lite: Args: [ '-c', 'lite-server' ]
12 silly lifecycle ang2-reg@1.0.0~lite: Returned: code: 1  signal: null
13 info lifecycle ang2-reg@1.0.0~lite: Failed to exec lite script
14 verbose stack Error: ang2-reg@1.0.0 lite: `lite-server`
14 verbose stack Exit status 1
14 verbose stack     at EventEmitter.<anonymous>
 (/tf/node/lib/node_modules/npm/lib/utils/lifecycle.js:239:16)
14 verbose stack     at emitTwo (events.js:100:13)
14 verbose stack     at EventEmitter.emit (events.js:185:7)
14 verbose stack     at ChildProcess.<anonymous> 
 (/tf/node/lib/node_modules/npm/lib/utils/spawn.js:24:14)
14 verbose stack     at emitTwo (events.js:100:13)
14 verbose stack     at ChildProcess.emit (events.js:185:7)
14 verbose stack     at maybeClose (internal/child_process.js:827:16)
14 verbose stack     at Process.ChildProcess._handle.onexit
 (internal/child_process.js:211:5)
15 verbose pkgid ang2-reg@1.0.0
16 verbose cwd /tf/sbtf/ang2-reg
17 error Linux 3.19.0-49-generic
18 error argv "/tf/node/bin/node" "/tf/node/bin/npm" "run" "lite"
19 error node v5.6.0
20 error npm  v3.7.2
21 error code ELIFECYCLE
22 error ang2-reg@1.0.0 lite: `lite-server`
22 error Exit status 1

【问题讨论】:

我可以用这个命令自动转译:npm run tsc:w 这是由可怕的 ENOSPC 错误引起的。 【参考方案1】:

我遇到了同样的错误,我可以在 ubuntu 中通过以下步骤解决它:

编辑文件/etc/sysctl.conf并添加下一行:

fs.inotify.max_user_watches = 524288

保存文件并输入:

sudo sysctl -p

然后再次尝试运行 npm start。 :)

【讨论】:

也适合我。谢谢!我很好奇,为什么这能解决问题? 这对我也有用。事实上,当我指定 32K 而不是 512K 时,它甚至可以工作。但是,使用 512K 的影响实际上只是内存。该号码似乎基于此链接:github.com/guard/listen/wiki/… 这个号码本身可能没有什么神奇之处。 Arch Linux 用户提示:Systemd 仅应用来自 /etc/sysctl.d/*.conf 的设置。如果您自定义了 /etc/sysctl.conf,则需要将其重命名为 /etc/sysctl.d/99-sysctl.conf 并在那里完成工作!【参考方案2】:

如果您正在寻找解决方法,建议使用 NodeJS 的 4.x 版

删除 NodeJS 5.x

sudo apt-get remove nodejs

编辑源列表以在 repo 中启用节点 4.x

sudo nano /etc/apt/sources.list.d/nodesource.list

然后在文件中编辑两行:

deb https://deb.nodesource.com/node_5.x vivid main
deb-src https://deb.nodesource.com/node_5.x vivid main

deb https://deb.nodesource.com/node_4.x vivid main
deb-src https://deb.nodesource.com/node_4.x vivid main

再次更新存储库

sudo apt-get update

然后重新安装节点

sudo apt-get install -y nodejs

检查应该写入类似 v4.3.1 或 v4.x.x 的版本

node -v

现在您可以运行 Angular 快速入门:

npm start

希望有用。

编辑:安装 NodeJS 4.x 版本后

在您的应用所在的文件夹中:

$ rm -r node_modules

然后

npm install

看起来很蠢,但是当你运行 npm install 时,它必须编译某些模块,并且可能(我不知道)编译它们的方式会随着 NodeJS 版本的变化而改变。

【讨论】:

不幸的是,这不起作用。我以前试过这个,但又试了一次,看看我是否错过了什么。同样的问题,与“堆栈跟踪”的行号略有不同。 看起来很明显,但是,您是否尝试过在安装 NodeJS v4.x 后删除 node_modules 文件夹并重新安装模块?

以上是关于运行 Angular 2 快速入门时解决或修复 Linux 上的 NPM lite-server 错误的主要内容,如果未能解决你的问题,请参考以下文章

Angular2 快速入门 - “无法获取”消息

markdown Angular 2快速入门

Eclipse 快速修复

Eclipse 快速修复

将 bootstrap 模块和 ng2-select 模块集成到 angular2 5 分钟快速入门

k8s:快速入门