标签: Node.js

  • 【NPM】package.json 参数详解

    package.json 必须是纯 JSON 格式,而不仅仅是一个 JavaScript 对象字面量。

    name 和 version

    Name 和 version 字段是 package.json 文件中最重要的字段。这是必须的字段,如果你的 npm 包没有指定这两个字段,将无法被安装。name 和 version 字段被假定组合成一个唯一的标识符。包内容的更改和包版本的更改是同步的。

    description

    npm 包的描述,description 是一个字符串。它可以帮助人们在使用 npm search 时找到这个包。

    keywords

    npm 包的关键字,keywords 是一个字符串的数组。它可以帮助人们在使用 npm search 时找到这个包。

    homepage

    项目主页的 url

    bugs

    改项目的 issue 跟踪页面或这报告 issue 的 email 地址。这对使用这个包遇到问题的用户会有帮助。

    license

    证书许可。SPDX表达式:

    { "license": "ISC" }
    { "license": "(MIT OR Apache-2.0)" }

    通常我们不希望授权别人以任何形式使用的私有包或未发布包,可以这样写:

    { "license": "UNLICENSED”}

    或者设置

    { "private": true }

    author, contributors

    关于人的字段

    files

    files 字段是一个被项目包含的文件名数组,如果你在里面放一个文件夹名,那么这个文件夹中的所有文件都会被包含进项目中(除非是那些在其他规则中被忽略的文件)。

    main

    Main 字段指定了模块的入口程序文件。就是说,如果你的模块名叫 "foo",用户安装了它,并且调用了 require("foo"),则这个main字段指定的模块的导出对象会被返回。 例如 node_modules 中引入的模块指定主入口文件。

    bin

    许多包有一个或多个可执行文件希望被安装到系统路径。提供一个bin字段,它是一个命令名和本地文件名的映射。在安装时,如果是全局安装,npm将会使用符号链接把这些文件链接到prefix/bin,如果是本地安装,会链接到 ./node_modules/.bin/。

    比如,要使用myapp作为命令时可以这么做:

    { "bin" : { "myapp" : "./cli.js" } }

    当安装完毕myapp,npm会从cli.js文件创建一个到/usr/local/bin/myapp的符号链接(这使你可以直接在命令行执行myapp)。

    man

    指定一个单一的文件名或一个文件名数组来让man程序使用。如果只给man字段提供一个文件,则安装完毕后,它就是 man 的结果,这和此文件名无关。

    directories

    CommonJS Packages 规范说明了几种你可以用 directories 对象来标示你的包结构的方法(lib、bin、man、doc、example)。

    repository

    指明你的代码被托管在何处,这对那些想要参与到这个项目中的人来说很有帮助。如果 git 仓库在 github 上,用 npm docs 命令将会找到你。

    scripts

    scripts 字段是一个由脚本命令组成的字典,这些命令运行在包的各个生命周期中。这里的键是生命周期事件名,值是要运行的命令。

    config

    config 字段是一个对象,可以用来配置包脚本中的跨版本参数。

    dependencies

    dependencies 字段是一个对象,它指定了依赖的包名和其版本范围的映射。版本范围是个有一个或多个空白分隔描述符的字符串。dependencies 字段还可以用 tarball 或者 git URL。

    (请不要将测试或过渡性的依赖放到 dependencies 中)

    devDependencies

    如果有人计划在他们的项目中下载和使用你的模块,但他们可能并不想或并不需要你开发所使用的外部测试和文档框架。 在这种情况下,最好将这些附加的项放在 devDependencies 中。即开发模式下的依赖。

    peerDependencies

    在某些情况下,当一个主机无法 require 依赖包时,你会想要告诉它还有哪些工具或库与这个依赖包兼容。这通常被成为一个插件。尤其是在 host 文档中声明的模块会暴露一个特定的接口。

    bundledDependencies

    在发布包时,包名的数组会被打包进去。

    optionalDependencies

    如果一个依赖项可用,但希望在这个依赖项无法被找到或者安装时失败npm还能继续处理(不中断),那么你可以把它放在 optionalDependencies中。和 dependencies 一样,optionalDependencies 是一个包名和版本号或 url 的映射。区别在于 optionalDependencies 中的依赖构建失败时不会导致 npm 整体安装失败。

    engines

    你可以指定node的工作版本:

    { "engines": { "node": ">=0.10.3 <0.12" } }

    os

    可以指定模块运行的操作系统:"os" : [ "darwin", "linux" ] 也可以使用操作系统黑名单来替代白名单,只要在前面加个’!’:

    { "os": [ "!win32" ] }

    cpu

    指明只能运行在特定的 cpu 架构上

    preferGlobal

    如果你的包是一个需要进行全局安装的命令行应用,需要设置 preferGlobal为true,如果这个包被本地安装会报出一个警告。 这个选项并不会阻止用户本地安装这个包,但这么做确实能在包未按照预期被安装造成诸多麻烦时提供一些提示。

    private

    如果你在包的 package.json 中设置” private": true “,则 npm 会拒绝发布它。这是防止私有包被以外发布的一种方法。

    publishConfig

    这是一个在 publish-time 时会用到的配置集合。当你想设置 tag、registry 或] access 时特别有用,所以你可以确保一个给定的包无法在没有被打上"latest"标记时就被发布到全局公共的registry。 任何配置都可以被覆盖,当然可能只有"tag", "registry" 和 "access" 和发布意图有关。

  • 【NPM】使用指南

    查看本机镜像地址

    npm config get registry

    如果是默认源或者淘宝镜像切换成私服地址

    • 默认镜像:https://registry.npmjs.org
    • 淘宝镜像:http://registry.npm.taobao.org
    • 私服地址:http://xxxx

    修改镜像地址

    npm config set registry http://xxxx

    (npm 私服下 有hosted(私有仓库,登录上传都是使用此仓库) proxy(代理仓库去下载第三方依赖) group(对外暴露的仓库地址,配置镜像地址) 登录都是登录hosted,镜像地址都是group的) package.json文件内配置镜像地址

    {
        "publishConfig": {
            "registry": "http://xxxx"
        }
    }

    到项目目录下登录镜像

    npm login

    输入账号密码(如果指定全局镜像为私服可以不加 –registry)或

    npm login  --registry=http://xxxx(指定要登录镜像地址)

    查看登录用户

    npm whoami

    推送镜像(注意:上传的包名 package.json 中name不能有大写空格和下划线)

    npm publish

    (如果指定全局镜像为私服可以不加 –registry)或

    npm publish  --registry=http://xxxx
    更新包
    • 需要将package.json的version版本号进行更新(1.0.0->1.0.1)
    • 忽略上传文件,可在gitignore文件中添加忽略文件
    • 使用下载依赖包,在新的项目中添加依赖名称和版本号 进行npm install 如下载失败请查看镜像地址是否正确
    • 异常情况
    Code 描述
    400 可能登录地址不对,可能私服已经存在此版本
    403 可能未登录,或者账户没有权限
    401 私服仓库可能权限不够npm Bearer Token Realm 可能未激活