npm包的发布和管理

npm包管理

npm其实是Node.js的包管理工具(node package manager)。

为啥我们需要一个包管理工具呢?因为我们在Node.js上开发时,会用到很多别人写的JavaScript代码。如果我们要使用别人写的某个包,每次都根据名称搜索一下官方网站,下载代码,解压,再使用,非常繁琐。于是一个集中管理的工具应运而生:大家都把自己开发的模块打包后放到npm官网上,如果要使用,直接通过npm安装就可以直接用,不用管代码存在哪,应该从哪下载。

更重要的是,如果我们要使用模块A,而模块A又依赖于模块B,模块B又依赖于模块C和模块D,npm可以根据依赖关系,把所有依赖的包都下载下来并管理起来。否则,靠我们自己手动管理,肯定既麻烦又容易出错。

npm的基础使用

npm的指令其实常用的并不多官方文档;列出来如下面:

  • access
    Set access level on published packages
  • adduser

    ```

    Add a registry user account
    ```

  • audit

    ```

    Run a security audit
    ```

  • bin

    ```

    Display npm bin folder
    ```

  • bugs

    ```

    Bugs for a package in a web browser maybe
    ```

  • build

    ```

    Build a package
    ```

  • bundle

    ```

    REMOVED *已删除*
    ```

  • cache

    ```

    Manipulates packages cache
    ```

  • ci

    ```

    Install a project with a clean slate
    ```

  • completion

    ```

    Tab Completion for npm
    ```

  • config

    ```

    Manage the npm configuration files
    ```

  • dedupe

    ```

    Reduce duplication
    ```

  • deprecate

    ```

    Deprecate a version of a package
    ```

  • dist-tag

    ```

    Modify package distribution tags
    ```

  • docs

    ```

    Docs for a package in a web browser maybe
    ```

  • doctor

    ```

    Check your environments
    ```

  • edit

    ```

    Edit an installed package
    ```

  • explore

    ```

    Browse an installed package
    ```

  • help-search

    ```

    Search npm help documentation
    ```

  • help

    ```

    Get help on npm
    ```

  • hook

    ```

    Manage registry hooks
    ```

  • init

    ```

    create a package.json file
    ```

  • install-ci-test

    ```

    Install a project with a clean slate and run tests
    ```

  • install-test

    ```

    Install package(s) and run tests
    ```

  • install

    ```

    Install a package
    ```

  • link

    ```

    Symlink a package folder
    ```

  • logout

    ```

    Log out of the registry
    ```

  • ls

    ```

    List installed packages
    ```

  • npm

    ```

    javascript package manager
    ```

  • outdated

    ```

    Check for outdated packages
    ```

  • owner

    ```

    Manage package owners
    ```

  • pack

    ```

    Create a tarball from a package
    ```

  • ping

    ```

    Ping npm registry
    ```

  • prefix

    ```

    Display prefix
    ```

  • profile

    ```

    Change settings on your registry profile
    ```

  • prune

    ```

    Remove extraneous packages
    ```

  • publish

    ```

    Publish a package
    ```

  • rebuild

    ```

    Rebuild a package
    ```

  • repo

    ```

    Open package repository page in the browser
    ```

  • restart

    ```

    Restart a package
    ```

  • root

    ```

    Display npm root
    ```

  • run-script

    ```

    Run arbitrary package scripts
    ```

  • search

    ```

    Search for packages
    ```

  • shrinkwrap

    ```

    Lock down dependency versions for publication
    ```

  • star

    ```

    Mark your favorite packages
    ```

  • stars

    ```

    View packages marked as favorites
    ```

  • start

    ```

    Start a package
    ```

  • stop

    ```

    Stop a package
    ```

  • team

    ```

    Manage organization teams and team memberships
    ```

  • test

    ```

    Test a package
    ```

  • token

    ```

    Manage your authentication tokens
    ```

  • uninstall

    ```

    Remove a package
    ```

  • unpublish

    ```

    Remove a package from the registry
    ```

  • update

    ```

    Update a package
    ```

  • version

    ```

    Bump a package version
    ```

  • view

    ```

    View registry info
    ```

  • whoami

    ```

    Display npm username

    ```

init

初始化创建package.json

npm init [--force|-f|--yes|-y|--scope]
npm init <@scope> (same as npx <@scope>/create)
npm init [<@scope>/]<name> (same as npx [<@scope>/]create-<name>)

search

搜索查看远程npm相关资源包信息

npm search [-l|--long] [--json] [--parseable] [--no-description] [search terms ...]
aliases: s, se, find

install

可以是说是install是最为常见的命令官方介绍

npm install (with no args, in package dir)
npm install [<@scope>/]<name>
npm install [<@scope>/]<name>@<tag>
npm install [<@scope>/]<name>@<version>
npm install [<@scope>/]<name>@<version range>
npm install <git-host>:<git-user>/<repo-name>
npm install <git repo url>
npm install <tarball file>
npm install <tarball url>
npm install <folder>

alias: npm i
common options: [-P|--save-prod|-D|--save-dev|-O|--save-optional] [-E|--save-exact] [-B|--save-bundle] [--no-save] [--dry-run]

In global mode (ie, with -g or --global appended to the command), it installs the current package context (ie, the current working directory) as a global package. The -g or --global argument will cause npm to install the package globally rather than locally.

The -f or --force argument will force npm to fetch remote resources even if a local copy exists on disk.

上面的还介绍已经很详细了,所以这里只是讲一下npm install packageName [|--save |--save-prod|--save-dev]的区别;

  • npm install babel
    npm5以前,会把X包安装到node_modules目录中,不会修改package.json的dependencies字段,之后运行npm install命令时,不会自动安装X
  • npm install babel
    npm5以后,会把X包安装到node_modules目录中,会修改package.json的dependencies字段,之后运行npm install命令时,会自动安装X, 线上环境时会被安装
  • npm install babel -P
    -P, --save-prod: Package will appear in your dependencies. This is the default unless -D or -O are present. Package will appear in your dependencies, With the --production flag (or when the NODE_ENV environment variable is set to production), npm will install modules listed in dependencies.
  • npm install babel -D
    Package will appear in your devDependencies,With the --production flag (or when the NODE_ENV environment variable is set to production), npm will not install modules listed in devDependencies. 会把X包安装到node_modules目录中,会在package.json的devDependencies属性下添加X,之后运行npm install命令时,会自动安装X到node_modules目录中,之后运行npm install –production或者注明NODE_ENV变量值为production时,不会自动安装X到node_modules目录中

update

升级某个资源包或者全部资源包到某一个版本或者匹配的最新版本。

npm update [-g] [<pkg>...]
aliases: up, upgrade

uninstall

移除某个资源包

npm uninstall [<@scope>/]<pkg>[@<version>]... [-S|--save|-D|--save-dev|-O|--save-optional|--no-save]
aliases: remove, rm, r, un, unlink

npm包创建、编写、测试、维护

Node出现之前,JavaScript是缺少包结构的。CommonJS致力于改变这种现状,于是定义了包的结构规范。而NPM的出现则是为了在CommonJS规范的基础上,实现解决包的安装卸载,依赖管理,版本管理等问题。require的查找机制明了之后,我们来看一下包的细节。
一个符合CommonJS规范的包应该是如下这种结构:

  • 一个package.json文件应该存在于包顶级目录下
  • 二进制文件应该包含在bin目录下(可选)
  • JavaScript代码入库是index.js,其他包含在lib目录下
  • 文档应该在doc目录下(可选)
  • 单元测试应该在test目录下(可选)

初始化包

  1. 创建包的根目录

    ```

    mkdir testpackage
    ```

  2. 初始化

    ```

    npm init // 需要进行一些基本配置
    ```

编写

  1. 创建入口文件

    ```

    touch index.js
    ```

  2. 编写代码

    ```

    const updateQueryString = function(url, key, value) {
    let urlParts = url.split(‘#‘),
    hash = ‘‘,
    uri = urlParts.shift(),
    re = new RegExp(`([?&])${key}=.*?(&|$)`, ‘i‘),
    separator = uri.indexOf(‘?‘) !== -1 ? ‘&‘ : ‘?‘,
    encodeKey = encodeURIComponent(key),
    encodeValue = encodeURIComponent(value);

    urlParts.length > 0 && (hash = `#${urlParts.join(‘#‘)}`);

    if (uri.match(re)) {
    return uri.replace(re, `$1${encodeKey}=${encodeValue}$2`) + hash;
    } else {
    return `${uri}${separator}${encodeKey}=${encodeValue}${hash}`;
    }
    };

    // 最后的导出部分
    module.exports = {
    updateQueryString
    };
    ```

  3. 测试

    1. 创建包的根目录

      ```

      npm i mocha -D // 安装测试库
      npm i chai -D // 安装断言库
      mkdir test
      cd test
      touch index.test.js
      ```

    2. 编写测试代码

      ```

      const utils = require(‘./../index.js‘);
      const expect = require(‘chai‘).expect;

      let {
      updateQueryString
      } = utils;

      describe(‘updateQueryString函数的测试‘, function() {
      it(‘https://test.com/path?test=11 修改test参数为22 应该等于 https://test.com/path?test=22‘, function() {
      expect(updateQueryString(‘https://test.com/path?test=11‘, ‘test‘, 22)).to.be.equal(‘https://test.com/path?test=22‘);
      });
      });
      ```

    3. 运行测试

      ```

      cd ..
      ./node_modules/mocha/bin/mocha
      ```

npm包的发布

  1. 注册账号npm官网
  2. 终端执行 npm login,输入用户名和密码 、邮箱
  3. npm publish 发布

Organization包

我们经常可以看到@angular@ionic他们的包, 都可以以@开头,那么我们的可不可以,原来angular、ionic都属于一个组织(Organization)只有新创建一个Organization组织之后,才能创建@testorg/testpackname这样的包!!!

那么我们就可以去官网上创建我们的Organization,命名之后,官方步骤

  1. 初始化

    ```

    npm init --scope=<your_org_name>
    ```

    npm init foo -> npx create-foo
    npm init @usr/foo -> npx @usr/create-foo
    npm init @usr -> npx @usr/create

  2. 修改package.json里面的name字段为@your_org_name/<pkg_name>
  3. 发布

    ```

    npm publish --access public // 公开包发布
    ```

npm包支持esmodule

使用babel来进行一些现代JavaScript的支持,

  1. 创建配置文件

    ```

    touch .babelrc
    ```

  2. 安装先关包
  3. 配置babel

    ```

    {
    "presets": [
    [
    "@babel/preset-env",
    {
    "targets": {
    "browsers": [
    "last 2 versions",
    "safari >= 7"
    ],
    "chrome": 52,
    "node": "6.10.0"
    },
    "modules": "commonjs",
    "useBuiltIns": "usage"
    }
    ]
    ],
    "plugins": [
    "@babel/plugin-syntax-dynamic-import",
    "@babel/plugin-syntax-import-meta",
    "@babel/plugin-proposal-class-properties",
    "@babel/plugin-proposal-json-strings",
    [
    "@babel/plugin-proposal-decorators",
    {
    "legacy": true
    }
    ],
    "@babel/plugin-proposal-function-sent",
    "@babel/plugin-proposal-export-namespace-from",
    "@babel/plugin-proposal-numeric-separator",
    "@babel/plugin-proposal-throw-expressions",
    "@babel/plugin-proposal-export-default-from",
    "@babel/plugin-proposal-logical-assignment-operators",
    "@babel/plugin-proposal-optional-chaining",
    [
    "@babel/plugin-proposal-pipeline-operator",
    {
    "proposal": "minimal"
    }
    ],
    "@babel/plugin-proposal-nullish-coalescing-operator",
    "@babel/plugin-proposal-do-expressions"
    ]
    }

    ```

  4. 编译

    ```

    ./node_modules/.bin/babel src -d lib
    ```

最后的测试代码地址test-demo-npm

原文地址:https://www.cnblogs.com/thatme/p/10162288.html

时间: 2024-11-05 12:25:49

npm包的发布和管理的相关文章

创建自己的私有npm包并发布

本文参考网上一些零散资料整理,比较系统的入门npm包的发布,干货在此: 1.下载node 地址:http://nodejs.cn/download/ 安装完毕之后可打开cmd命令行测试是否安装成功 若出现版本,则说明安装成功. 2.  OK安装工作一切就绪,下面我们来开始写一个简单的模块! 在任意你喜欢的地方建立一个工作目录!我建立在d:/nomDemo目录下. 新建一个js文件,命名为a.js ,输入如下代码 function hello(name){  console.log("hello&

关于npm 包的发布

注册一个npm 账号,打开命令行输入 npm add user 然后登录 npm login 发布npm 包,在你要发布的包的目录下,在创建账号后需要认证邮箱,否则无法发布,发布同一个包,每次的版本需要比上一次发布的大,才能发布 npm publish 删除npm包 npm unpublish --force //强制删除 npm unpublish [email protected]1.0.1 //指定版本号 关于包名 包名类似,拒绝发布,包名就是package.json 中的name 例如:

创建并发布npm包

1.npm官网创建npm账户 npm网站地址:https://www.npmjs.com/ npm网站注册地址:https://www.npmjs.com/signup 2.命令行工具登录npm npm login 验证登录是否成功 npm who am i 3.创建npm库 npm init 按照提示输入相应内容: 以下为package.json内容: { "name": "zgb_npm", "version": "1.0.0&qu

(转)前端开发-发布一个NPM包之最简单易懂流程

原文地址:https://www.cnblogs.com/sghy/p/6829747.html 1.npm官网创建npm账户 npm网站地址:https://www.npmjs.com/ npm网站注册地址:https://www.npmjs.com/signup 2.命令行工具登录npm npm login 验证登录是否成功 npm who am i 3.创建npm库 npm init 按照提示输入相应内容: 以下为package.json内容: { "name": "z

开发一个健壮的npm包

项目地址:loan-calculate-utils npm包的发布.更新查看上一篇文章 开发一个基础的npm包 目前我们的目录是这个样子: . ├── source 源代码目录 │?? └── index.js ├── package.json └── README.md 接下来给项目添加 打包,忽视文件,ts声明文件,单元测试,eslint,README.md添加徽标. 打包 参考 ramda 打包思路,我们将要编译成三种包,以及它们的压缩版. 打包目标 umi: babel source -

nodejs第三天(核心模块与文件模块,核心模块和文件模块引入的区别,从模块外部访问模块内部,使用exports对象,npm包管理工具package.json文件,模块对象属性,将模块定义分类,npm发布流程,安装淘宝镜像,模块的管理)

核心模块与文件模块 ndejs是一个js运行环境,是一个平台.nodejs基于操作系统,封装了一些功能,http,tcp,udp,i/o模块,path,fs,stream等等 通过nodejs内置的模块,他们就称为核心模块.(他们都是nodejs内置的)http,fs,path等 文件模块:只要写一个js文件,每一个文件都是模块 .(自己写的js文件都被称为文件模块) 核心模块和文件模块引入的区别 核心模块有环境变量做调度 文件模块需要给出文件路径 注意:核心模块是nodejs内置的一些功能模块

不会发布npm包?进来包会!

前言 本文从发布一个简单的npm包开始,逐步对它进行完(踩)善(坑)和扩(装)展(逼),最后得到一个相对完善的npm包,下面就让我们手摸手,呸!手把手的开始吧! 一.一个最简单的npm包 1.1 新建文件夹 可以找个地方直接建个文件夹,最好语义化一点,这样以后也方便管理,我们这里用终端建文件夹: mkdir toupper-case-project // 这里我们建了一个名为toupper-case-project的文件夹 (对命令行还不太熟的小伙伴可以看看我这篇博客命令行不会?看这里) 1.2

记录如何发布微信小程序npm包

1.初始化项目 在项目根目录下使用一下命令 npm init 这时终端会提示你输入诸如包名,版本号等信息,如下: 2.新建src文件夹 新建src文件夹之后,把微信小程序自定义组件的index.js.index.wxss.index.json.index.wxml四个文件都拉到src文件夹里面即可.文件目录如下图: 3.修改package.json文件 在 package.json 文件中新增一个 miniprogram 字段,指向src文件即可.这是官方文档发布npm的约束条件.npm支持 微

关于 npm 包管理器最常用的内容都在这儿了

Nodejs的诞生,给前端开发世界带来了翻天覆地的变化. 前端工程化,各种工具,以及向后端的能力扩展. 车子离不开轮子,node(前后端)开发离不开npm这个包管理工具,在这总结下常用配套工具: npm nrm nvm npm 安装Nodejs会自带 npm,这个默认的包管理器. 常用的基本命令有 初始化,建立工程(主要体现在生成一个package.json的文件) npm init 安装包 如果是clone一个已有工程,下到本地第一步自然是安装所有的依赖包了. npm install // 简