【问题标题】:Error when trying to run npm http-server尝试运行 npm http-server 时出错
【发布时间】:2016-12-14 17:20:45
【问题描述】:

我有一个 node.js/angular2 项目,我之前一直使用 lite-server 提供服务,但由于我需要提供服务器端文件,我正在切换到使用 http-server。之前要同时运行 lite 服务器和 typescript 编译器,我在 package.json 中有命令:"start": "tsc && concurrently \"tsc -w\" \"lite-server\" ",。我最初将它切换到"start": "tsc && concurrently \"tsc -w\" \"http-server\" ",,我发现它给出了错误:

[1] 'http-server' is not recognized as an internal or external command,
1] operable program or batch file.
1] http-server exited with code 1

在看到this SO post 之后,我尝试了:tsc && concurrently "tsc -w" "./node_modules/http-server/bin",它返回了同样的错误。 运行http-server 的正确命令是什么?

更新:

我按照建议修改了我的package.json

{
  "name": "angular2-quickstart",
  "version": "1.0.0",
  "description": "QuickStart package.json from the documentation, supplemented with testing support",
  "scripts": {
    "start": "tsc && concurrently \"tsc -w\" \"node app/index.js\" ",
    "docker-build": "docker build -t ng2-quickstart .",
    "docker": "npm run docker-build && docker run -it --rm -p 3000:3000 -p 3001:3001 ng2-quickstart",
    "pree2e": "npm run webdriver:update",
    "e2e": "tsc && concurrently \"http-server -s\" \"protractor protractor.config.js\" --kill-others --success first",
    "lint": "tslint ./app/**/*.ts -t verbose",
    "lite": "lite-server",
    "http": "http-server",
    "postinstall": "typings install",
    "server": "http-server",
    "test": "tsc && concurrently \"tsc -w\" \"karma start karma.conf.js\"",
    "test-once": "tsc && karma start karma.conf.js --single-run",
    "tsc": "tsc",
    "tsc:w": "tsc -w",
    "typings": "typings",
    "webdriver:update": "webdriver-manager update"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "@angular/common": "2.0.0-rc.4",
    "@angular/compiler": "2.0.0-rc.4",
    "@angular/core": "2.0.0-rc.4",
    "@angular/forms": "0.2.0",
    "@angular/http": "2.0.0-rc.4",
    "@angular/platform-browser": "2.0.0-rc.4",
    "@angular/platform-browser-dynamic": "2.0.0-rc.4",
    "@angular/router": "3.0.0-beta.2",
    "@angular/router-deprecated": "2.0.0-rc.2",
    "@angular/upgrade": "2.0.0-rc.4",
    "angular2-in-memory-web-api": "0.0.14",
    "bootstrap": "^3.3.6",
    "cheerio": "latest",
    "core-js": "^2.4.0",
    "express": "latest",
    "file-system": "^2.2.1",
    "http-server": "^0.9.0",
    "reflect-metadata": "^0.1.3",
    "request": "latest",
    "rxjs": "5.0.0-beta.6",
    "systemjs": "0.19.27",
    "zone.js": "^0.6.12"
  },
  "devDependencies": {
    "concurrently": "^2.2.0",
    "lite-server": "^2.2.0",
    "typescript": "^1.8.10",
    "typings": "^1.0.4",
    "canonical-path": "0.0.2",
    "http-server": "latest",
    "tslint": "^3.7.4",
    "lodash": "^4.11.1",
    "jasmine-core": "~2.4.1",
    "karma": "^0.13.22",
    "karma-chrome-launcher": "^0.2.3",
    "karma-cli": "^0.1.2",
    "karma-htmlfile-reporter": "^0.2.2",
    "karma-jasmine": "^0.3.8",
    "protractor": "^3.3.0",
    "rimraf": "^2.5.2"
  },
  "repository": {}
}

我在项目根目录下运行npm install http-server --save命令,出现如下错误:

+-- @reactivex/rxjs@5.0.0-beta.10  extraneous
+-- UNMET PEER DEPENDENCY reflect-metadata@0.1.3
`-- UNMET PEER DEPENDENCY rxjs@5.0.0-beta.6

npm WARN optional Skipping failed optional dependency /chokidar/fsevents:
npm WARN notsup Not compatible with your operating system or architecture: fsevents@1.0.14
npm WARN angular2@2.0.0-beta.15 requires a peer of reflect-metadata@0.1.2 but none was installed.
npm WARN angular2@2.0.0-beta.15 requires a peer of rxjs@5.0.0-beta.2 but none was installed.

这些软件包最初是安装的,那么可能导致这些错误的原因是什么?

【问题讨论】:

  • 这些不是来自http-server 的错误,它没有对等依赖项,而是来自rxjs 从它的外观。

标签: javascript node.js http npm server


【解决方案1】:

正确的命令是http-server,但是你需要确保你已经正确安装了http-server。

如果您使用npm install -g http-server,您只需在任何地方使用http-server。 CLI 或 package.json 脚本,没关系,它只是工作。

如果您使用npm install http-server --save 或 save-dev 等,那么您仍然只需使用 http-server,但作为 package.json 脚本的一部分。然后它只能通过 npm 脚本工作,因为 npm 会为您完成所有环境引导。不要试图猜测 http-server bin 的位置。

对于奖励积分,将所有不同的东西捕获为自己的 npm 任务,然后使用 npm 任务组合或类似npm-run-all

...
"scripts": {
  "server": "http-server",
  "tsc": "tsc",
  "tsc:w": "tsc -w",
  "start": "npm-run-all tsc tsc:w server"
},
...
"dependencies": {
  ...
  "http-server": "...",
  ...
}

2017 年编辑

或者,如果你不想要全局包,你也可以使用npx,作为“你唯一安装的全局”,然后你可以使用npx modulename运行本地模块,在这种情况下,@987654331 @。

【讨论】:

  • 我最初在全球范围内安装了 http-server,这似乎可以正常工作。当我出于某种原因做npm install http-server --save 时,我遇到了一些错误。我会用我所做的更新帖子。谢谢
  • 看来旧项目有问题,所以我开始了一个新项目并重新安装了http-server。它现在似乎可以工作了。
  • 啊,是的,发生这种情况时非常烦人!
猜你喜欢
  • 1970-01-01
  • 2021-01-08
  • 2020-12-18
  • 1970-01-01
  • 1970-01-01
  • 2020-06-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多