npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

hello-npm-test

v3.0.0

Published

a node test module which will be published to npm.

Downloads

17

Readme


title: 如何发布一个自己的node模块到npm date: 2019-4-1 tags:

  • node
  • npm categories: npm相关

本文介绍如何创建一个自己的 node 模块,以及怎样发布到 npm ,与其他开发人员共享你的模块。

前言

作为一个前端开发人员,或者 nodejs 开发人员,目前我们使用最多的模块管理机制实属是 npm。我们可以使用很简单方式引用其他开发者发布到 npm 的模块。例如,当需要在你的项目中使用 vue。那么你可以:

$ npm install vue --save

安装 vue 模块到你的项目中,然后通过简单的导入命令使用她:

const Vue = require('vue')

// 或者使用 es Module 语法

import Vue from 'vue'

new Vue({
  // ...
})

那么,我们自己怎样去创建一个自己模块,并且发布到 npmjs 呢?

准备

在开始之前,你需要有 3 样关键的工具,请确保你已经安装或者注册了。

  1. 编辑器,推荐使用 Visual Studio Code
  2. Node.js 环境
  3. npm 账户

创建一个模块

npm init

首先,我们要初始化一个 node 项目,也就是你的 node 包。随便在电脑的哪个位置创建一个新的文件夹,名字嘛,假定我们叫她 hello-npm。什么!你说她俗气?没办法!因为 苏大强 喜欢,我 苏明成 表示也没有办法。

OK!使用编辑器打开并进入到 hello-npm 文件夹,使用 npm init 初始化 package.json

$ npm init

这时你会看到一些提示:

elenh@elenh MINGW64 ~/Desktop/hello-npm
$ npm init
This utility will walk you through creating a package.json file.
It only covers the most common items, and tries to guess sensible defaults.

See `npm help json` for definitive documentation on these fields
and exactly what they do.

Use `npm install <pkg>` afterwards to install a package and
save it as a dependency in the package.json file.

Press ^C at any time to quit.
package name: (hello-npm) hello-npm
version: (1.0.0)
description: a node test module which will be published to npm.
entry point: (index.js)
test command:
git repository:
keywords: npm node test
author: elenh
license: (ISC)
About to write to C:\Users\yisiw\Desktop\hello-npm\package.json:

{
  "name": "hello-npm",
  "version": "1.0.0",
  "description": "a node test module which will be published to npm.",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [
    "npm",
    "node",
    "test"
  ],
  "author": "elenh",
  "license": "ISC"
}


Is this ok? (yes) y

具体的意思就是确定 package.json 文件中的一些必要字段信息。比如,包的名字 name ,包的语义化版本号 version ,包的描述信息 description,包的入口点 (entry point)main,测试脚本命令 (test command)script,git 仓库地址 (git repository),在 npm 中的搜索关键字 keywords ,包的作者名 author 以及该包的开源许可证类别 license

注:如果直接按回车的话,表示直接使用默认值设置该字段,但是作为一个即将要把包发布到 npm 的模块分享者来说,请仔细填写这些信息。因为这关系到该模块是否能正常使用(main 入口点),或则说别的开发者能够方便检索到你的模块(keywords, description)。很关键的一点是,你的 version 字段一定要遵循 npm 的语义化版本定义规则。以便使用此模块的开发者知道使用该模块的哪个版本。关于 语义化版本规则 请参考本博客的另一篇文章 npm的使用

编写模块

现在,我们已经初始化好了 package.json 文件。是时候创建模块文件了。在 hello-npm 文件夹中新建一个名为 index.js 的文件。并在里面写入如下代码:

module.exports = function ( str ){
  console.log( 'hello' + str )
}

如上,使用 CommonJs 模块语法默认导出了一个函数,代码质量及其酷炫。苏明玉 都表示很惊讶!

至于为什么使用名为 index.js 的文件呢?这边要说的话就需要展开 nodejs 的模块加载规则了,嗯,苏明哲让我别展开了,听大哥的话,所以请自行 Google

另一点需要说的是,在 package.json 文件中,我们定义了模块的入口点(entry point)main 字段,其默认值就是 index.js。她表示当使用模块导入语法使用该模块时,使用哪个文件作为入口点。当然,你可以修改她,比如:

{
  "main": "src/index.js"
}

表示模块入口点为 src 文件夹下的 index.js 文件。

测试你的模块

到目前为止,你的模块已经可用了,那么怎么测试你的模块呢?此时,因为还没有发布到 npm ,所以不能使用如下方式直接安装。

$ npm install hello-npm

重新创建一个项目文件夹用来测试我们新写的模块,名为 my-project 。进入到该文件夹,初始化 node 项目。

npm init -y

此时,我们直接使用默认的 package.json 的设置即可,因为只是用来测试的。

同样,我们新建一个 index.js 文件,并准备在该文件中使用 hello-npm 模块。

两种方式来引用她:

  • 可以使用本地绝对路径引用的方式来使用她。

cd 进入到 my-project 文件夹中,并安装 hello-npm

$ npm install C:/Users/yisiw/Desktop/hello-npm

然后你可以看到 my-project 文件夹中的 package.json 文件中多出了 dependencies 字段如下:

{
  "name": "my-project",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "hello-npm": "file:../hello-npm"
  }
}

index.js 中使用她。

// my-project/index.js

const log = require('hello-npm')

log('npm')

然后在终端执行:

$ node index.js
hellonpm

没错!成功的打印出了 hellonpm,鼓掌。

  • 你也可以使用 npm linkhello-npm 包关联到全局后通过 npm link hello-npm 来使用她。

首先进入到 hello-npm 文件中,打开命令行,输入如下命令:

npm link

这句命令的意思是将本模块地址关联到 nodejs 的全局环境中,以便可以在本机的任何项目中使用她。

E:\nodejs\node_modules\hello-npm -> C:\Users\yisiw\Desktop\hello-npm

为了同第一种方式区分开,我们首先把之前的 node_modules 文件夹、package-lock.jsonpackage.json 中的 dependencies 字段删除,然后进入到 my-project 文件夹中。输入如下命令:

npm link hello-npm

elenh@elenh MINGW64 ~/Desktop/my-project
$ npm link hello-npm
C:\Users\yisiw\Desktop\my-project\node_modules\hello-npm -> E:\nodejs\node_modules\hello-npm -> C:\Users\yisiw\Desktop\hello-npm

执行完 npm link hello-npm 命令后,你会发现,my-project 文件夹中的 node_mnodules 右出现了,并且里面存在 hello-npm 包。那么我们再次执行:

$ node index.js
hellonpm

没错,同样是有用的。

将模块管理到 Github

接下来,我们应该将我们的包使用版本控制工具管理起来,方便之后的维护及更新。没错!是 Github。理所当然!

发布到 npm