首页 > 解决方案 > npm start 没有获取更新的 package.json

问题描述

我正在从头开始编写一个节点应用程序,使用以下package.json,这是非常样板。

{
    "name": "myfirstnodeproject",
    "version": "1.0.1",
    "description": "Learning node",
    "main": "index.js",
    "start": "node server.js",
    "scripts": {
        "test": "echo \"Error: no test specified\" && exit 1"
    },
    "license": "ISC",
    "dependencies": {
        "request": "^2.88.2"
    }
}

我创建server.js看起来像这样:

var http = require("http");

http.createServer((inRequest, inResponse) => {
    inResponse.end("Your IP Address is " + inRequest.connection.remoteAddress);
}).listen(9000);

当我使用 启动应用程序时npm start,它运行良好。

然后,我创建了一个名为server_time.js的新文件:

require("http").createServer((inRequest, inResponse) => {
    const requestModule = require("request");
    requestModule(
        "http://worldtimeapi.org/api/timezone/America/New_York",
        function (inErr, inResp, inBody) {
            inResponse.end(
               `Hello from my first Node Web server: ${inBody}`
            );
        }
    );
}).listen(9000);

我在package.json中更改了以下行:

"start": "node server_time.js",

然而,Node 似乎仍然选择了server.js。我尝试了npm cache verify, npm cache clear --force, rm -rf node_modules, rm package-lock.json,npm install又一次,但问题似乎并没有消失。我什至删除了package.json并重新定义了它,但是start我调用时的值npm start仍然是陈旧的。

这是我的 shell 的输出:

GsMacbookPro:MyFirstNodeProject g$ cat package.json
{
  "name": "myfirstnodeproject",
  "version": "1.0.1",
  "description": "Learning node",
  "main": "index.js",
  "start": "node server_time.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "G",
  "license": "ISC",
  "dependencies": {
    "request": "^2.88.2"
  }
}
GsMacbookPro:MyFirstNodeProject g$ ls
node_modules        package-lock.json   package.json        server.js       server_time.js
GsMacbookPro:MyFirstNodeProject g$ npm start

> myfirstnodeproject@1.0.1 start /Users/g/Repos/MyFirstNodeProject
> node server.js

在有人问之前,node 版本是v10.16.3,npm 版本是6.9.0

标签: javascriptnode.jsjson

解决方案


当前为您工作的原因npm start是因为npm将根据包内容默认一些脚本值。

如果你的包根目录中有 server.js 文件,那么 npm 将默认启动命令为node server.js.

看这里:

所以你start里面的字段package.json实际上并没有做任何事情,因为它不在scripts应该属于的地方。

正确的方法是更新您的package.json,使其如下所示:

{
  "name": "myfirstnodeproject",
  "version": "1.0.1",
  "description": "Learning node",
  "main": "index.js",
  "scripts": {
    "start": "node server_time.js",
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "G",
  "license": "ISC",
  "dependencies": {
    "request": "^2.88.2"
  }
}

推荐阅读