美文网首页Nodejs
npm中package.json详解

npm中package.json详解

作者: AAA前端 | 来源:发表于2021-10-25 12:02 被阅读0次

package.json

什么是Node.js的模块(Module)?在Node.js中,模块是一个库或框架,也是一个Node.js项目。Node.js项目遵循模块化的架构,当我们创建了一个Node.js项目,意味着创建了一个模块,这个模块的描述文件,被称为package.json。

package.json属性说明

{
    "name": "hello world", // 项目名称
    "version": "0.0.1", // 版本号:大版本.次要版本.小版本
    "author": "张三",
    "description": "第一个node.js程序",
    "keywords":["node.js","javascript"], // 关键词,有助于 npm search 发现
    "repository": { // 存储库,指定代码所在位置(如果git repo在GitHub上,那么该npm docs 命令将能够找到文件位置。)
        "type": "git",
        "url": "https://path/to/url"
    },
    "license":"MIT", // 指定包许可证,详细可见[SPDX许可证ID的完整列表](https://spdx.org/licenses/)
    "engines": {"node": "0.10.x"}, // 指定该模块运行的平台,可以指定 node 版本、npm 版本等
    "bugs":{"url":"http://path/to/bug","email":"bug@example.com"}, // 项目问题跟踪器的URL和应报告问题的电子邮件地址。
    "contributors":[{"name":"李四","email":"lisi@example.com"}],
    "bin": { // 指定内部命令对应的可执行文件的位置,在 scripts 中就可以简写
        "webpack": "./bin/webpack.js"
    },
    "main": "lib/webpack.js", // 指定加载的模块入口文件,require('moduleName')就会加载这个文件。这个字段的默认值是模块根目录下面的index.js。
    "config" : { "port" : "8080" }, // 用于添加命令行的环境变量(用户在运行 scripts 命令时,就默认在脚本文件中添加 process.env.npm_package_config_port,用户可以通过 npm config set foo:port 80 命令更改这个值)
    "scripts": { // 指定运行脚本的 npm 命令行缩写
        "start": "node index.js"
    },
    "peerDependencies": { // 指定项目安装必须一起安装的模块及其版本号,(注意:从 npm 3.0 开始,peerDependencies不会再默认安装)
        "chai": "1.x"
    },
    "dependencies": { // 指定项目运行所依赖的模块
        "express": "latest",
        "mongoose": "~3.8.3",
        "handlebars-runtime": "~1.0.12",
        "express3-handlebars": "~0.5.0",
        "MD5": "~1.2.0"
    },
    "devDependencies": { // 指定项目开发所需要的模块
        "bower": "~1.2.8",
        "grunt": "~0.4.1",
        "grunt-contrib-concat": "~0.3.0",
        "grunt-contrib-jshint": "~0.7.2",
        "grunt-contrib-uglify": "~0.2.7",
        "grunt-contrib-clean": "~0.5.0",
        "browserify": "2.36.1",
        "grunt-browserify": "~1.3.0",
    },
    "browser": { // 指定该模板供浏览器使用的版本
        "tipso": "./node_modules/tipso/src/tipso.js"
    },
    "preferGlobal": true, // 表示当用户不将该模块安装为全局模块时(即不用–global参数),要不要显示警告,表示该模块的本意就是安装为全局模块。
}

版本号的描述

npm模块的完整的版本号一般是【主版本 . 次要版本 . 补丁版本】,一般情况下,次要版本号发生改变的话,表示程序有重大更新。

  • 指定版本:比如1.2.2,遵循“大版本.次要版本.小版本”的格式规定,安装时只安装指定版本。

  • 波浪号(tilde)+指定版本:比如~1.2.2,表示安装1.2.x的最新版本(不低于1.2.2),但是不安装1.3.x,也就是说安装时不改变大版本号和次要版本号。


    image.png
  • 插入号(caret)+指定版本:比如ˆ1.2.2,表示安装1.x.x的最新版本(不低于1.2.2),但是不安装2.x.x,也就是说安装时不改变大版本号。需要注意的是,如果大版本号为0,则插入号的行为与波浪号相同,这是因为此时处于开发阶段,即使是次要版本号变动,也可能带来程序的不兼容。


    image.png
  • latest:安装最新版本。

npm install 与 npm update

  • 如果本地 node_modules 已安装,再次执行 install 不会更新包版本, 执行 update 才会更新; 而如果本地 node_modules 为空时,执行 install/update 都会直接安装更新包;
  • npm update 总是会把包更新到符合 package.json 中指定的 semver(语义化版本) 的最新版本号——本例中符合 ^1.8.0 的最新版本为 1.15.0
  • 一旦给定 package.json, 无论后面执行 npm install 还是 update, package.json 中的 webpack 版本一直顽固地保持 一开始的 ^1.8.0 岿然不动

npm i 与 npm install

实际使用的区别点主要如下:

  • 用npm i安装的模块无法用npm uninstall删除,用npm un才卸载掉
  • npm i会帮助检测与当前 node 版本最匹配的 npm 包版本号,并匹配出来相互依赖的 npm 包应该提升的版本号
  • 部分 npm 包在当前 node 版本下无法使用,必须使用建议版本
  • 安装报错时 install 肯定会出现 npm-debug.log 文件,npm i不一定

npm devDependencies 与 dependencies

--save-dev

—save

首先需要说明的是 Dependencies一词的中文意思是依赖和附属的意思,而dev则是 develop(开发)的简写。

所以它们的区别在 package.json 文件里面体现出来的就是,使用 --save-dev 安装的 插件,被写入到 devDependencies 域里面去,而使用 —save 安装的插件,则是被写入到 dependencies 区块里面去。

那 package.json 文件里面的 devDependencies 和 dependencies 对象有什么区别呢?

devDependencies 里面的插件只用于开发环境,不用于生产环境,而 dependencies 是需要发布到生产环境的

比如我们写一个项目要依赖于jQuery,没有这个包的依赖运行就会报错,这时候就把这个依赖写入dependencies

npm 包命令

npm list -g --depth 0 // 查看全局安装过的包 -g:全局的安装包 list:已安装的node包 –depth 0:深度0
npm view <packageName> // 查看npm服务器中包版本号 
npm info <packageName> // npm服务器更多信息,更多版本号
npm ls <packageName> // 本地包
npm ls <packageName> -g // 全局安装包
npm docs // 打开包git目录

// 注意:npm build 与 npm start 是项目中常用的命令,注意它们有什么不同

// 在 package.json 文件中定义的 "scripts" 对象中查找 "start" 属性,
// 执行该属性定义的命令,如果没有定义,默认执行 node server.js 命令
npm start [--<args>] 

 // 其中,<package-folder> 为其根目录中包含一个 package.json 文件的文件夹,
// 这是由 npm link 命令和 npm install 命令组成的管道命令,
// 通常在安装过程中被调用。如果想要直接运行它,则运行 npm run build
npm build [<package-folder>]

bin

对于 全局模式安装的包(通过 -g 来安装的包,将包安装成全局可用的可执行命令,并不意味着任何地方都可以通过 require() 来引用它):它会通过 bin 字段配置,将实际脚本链接到 Node 可执行目录下,例如

"bin": {
  "webpack": "./bin/webpack.js" // 告诉package.json.我的bin文件叫wepack,实际执行的文件地址路径为./bin/webpack.js
},

必须要打成全局包才可以使用该命令,打成全局包的命令
npm install . -g
或者
npm link
符号链接和package.json中的bin属性

参考:https://www.jianshu.com/p/b3d86ddfd555
https://www.pzijun.cn/blog/7/1.4.html#%E4%B8%80-package-json-%E8%A7%A3%E8%AF%BB

相关文章

网友评论

    本文标题:npm中package.json详解

    本文链接:https://www.haomeiwen.com/subject/ufchaltx.html