如果你是一个JavaScript系的开发者,一定不会陌生NPM,它既是一个平台,也是一个工具。在这个平台上,我们能够使用其他开发者提供的功能代码,当然我们也能将我们自己代码提交到这里分享给世界上的开发者。

以下记录一些NPM作为工具的一些使用技巧。

npmrc

.npmrc 做为npm的配置文件,它可以定义在多个地方。

  • ~/.npmrc

用户根目录,根目录内所有的npm指令都会查询到该配置

  • /path/to/npm/npmrc

npm内建配置文件

  • ./.npmrc

当前项目根目录,用于配置特定于当前项目的配置

npmrc对我们来说十分有用,我们可以配置例如username、registry、email等信息。 eg:

save=true
save-exact=true
email=wfsovereign@outlook.com
username=wfsovereign
registry=https://registry.npm.taobao.org

npm最让人头疼的问题之一就是版本号了,这里配置了save和save-exact属性,作用是让我们 npm install 指令安装的依赖自动保存在package.json文件的dependencies中并且让版本号固定。

一些国内的服务器在拉取某些被墙的包的经常会失败或者速度很慢,这个时候我们可以试试淘宝NPM镜像(这是一个完整 npmjs.org 镜像,你可以用此代替官方版本(只读),同步频率目前为 10分钟 一次以保证尽量与官方服务同步)。官方还定制了cnpm,这个看具体情况而定了。比如,我曾经的一个项目,部署在微软的Asure上面,这个服务器感觉被墙的厉害,用官方的npm库下phantomjs的zip文件运气好的话也得下个两三次才能下下来,后来为了解决这个问题尝试了淘宝镜像,不过问题就出在用了cnpm,用cnpm拉的包在本地编译不了,后来换回npm,使用淘宝镜像,一切正常了~

package.json

package.json是项目的配置管理文件,它定义了这个项目所需要的各个依赖模块以及项目的配置信息(名字,版本号,许可证等)。一个最基本的package.json必须有nameversion,差不多长这样:

{
"name": "xxx",
"version": 0.0.0
}

我们可以通过npm init指令初始化创建一个package.json文件,

{
"name": "test",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "wfsovereign",
"license": "ISC",
"devDependencies": {
},
"dependencies": {
}
}

下面分属性介绍

scripts

scripts定义了一些脚本指令的npm命令缩写,通过这些命令我们可以方便的启动项目、进行测试或者拿到一些钩子来做某些指令前预先做的事,

"scripts": {
"pretest": "echo \"this is pre test\" ",
"test": "echo \"Error: no test specified\"",
"posttest": "echo \"this is post test\""
}

当我们执行npm test会得到如下输出:

this is pre test

test@1.0.0 test echo "Error: no test specified"

Error: no test specified

test@1.0.0 posttest echo "this is post test"

this is post test

通过如上实验,我们能够知道,prexx指令是一个预执行指令,postxx是一个后置指令,他俩都和xx指令强相关。

main

main指定项目加载的入口文件,默认是根目录的inde.js

file

file是一个字符串的数组,指定我们发布的包应该包含当前目录的哪些文件,这个在我们发布包的时候很有用,因为开发包里面的文件夹不是都需要发布出去的。当然一下文件是始终会被包含进去的,不论我们是否设置,

  • package.json
  • README
  • CHANGES / CHANGELOG / HISTORY
  • LICENSE / LICENCE
  • NOTICE
  • The file in the "main" field

keywords

keywords指定了在库中搜索时能够被哪些关键字搜索到,所以一般这个会多写一些项目相关的词在这里,这是一个字符串的数组。

其余属性详情可以查询官方文档

semantic version

关于语义化的版本号,这里不多讲,放一些preference

Nodejs项目中最常见的一些版本标识( *, ~, ^ ),经常忘了它们的含义,这里记录一下:

  • * 任意版本
  • 1.0.0 安装指定的1.0.0版本

lodash: 4.7.0 会安装准确的4.7.0到我们的node_module目录

  • ~1.0.0 安装 >= 1.0.0 小于 1.(0 + 1).0的最新版本
  • ^1.0.0 安装 >= 1.0.0 小于 (1 + 1).0.0的最新版本

package publish

如何发布一个包?

  1. npm addUser 按照提示输入账号密码,创建一个npm的账号,如果已有账号直接到下一步
  2. npm whoami 查看当前用户,确认是使用当前用户来发布包
  3. npm publish 然后就可以直接发布了,当然这个时候可能会出现各种问题,比如你的包和别人的重名了,或者当前的包的版本号已经发布过了等等

说到发布包,这里在记录一些开发包的小技巧。

我们在开发包的时候免不了一些调试,但是这些调试的过程我们并不想它发布又想确保当前的功能是可用的,这个时候有两个办法能够帮助我们来解决这个问题。

  • npm link

关于npm link的详细介绍我们可以看官网,这里介绍三种用法:

  1. 直接在我们开发包的主目录下直接使用,这个时候,相当于我们在npm global的目录下符号链接了当前包。
  2. npm link package-name, 作用相当于把一个全局安装的包link到了我们当前目录下node_module中。
  3. package.json文件的dependencies中使用如下方式声明,然后就如同使用一个已经正常发布的包一样安装使用就行。
"dependencies": {
"bar": "file:../foo/bar"
}

ps: 继续努力啊,如风少年~

NPM使用技巧的更多相关文章

  1. 提升你的开发效率,10 个 NPM 使用技巧

    对于一个项目,常用的一些npm简单命令包含的功能有:初始化一个文件夹(npm init),下载npm模块(npm install),创建测试(npm test) 和自定义脚本(npm run).但是, ...

  2. nodejs进阶(1)——npm使用技巧和最佳实践

    nodejs进阶教程,小白绕道!!! npm使用技巧和最佳实践 前提:请确保安装了node.js npm的最佳实践 npm install是最常见的npm cli命令,但是它还有更多能力!接下来你会了 ...

  3. 10个 NPM 使用技巧

    对于一个项目,常用的一些npm简单命令包含的功能有:初始化一个文件夹( npm init ),下载npm模块( npm install ),创建测试( npm tese ) 和自定义脚本( npm r ...

  4. npm常用技巧

    npm中内置了大量的实用技巧,如何高效的使用它们是一件充满挑战的事情.学会下面11个技巧,将会让你在任何项目中使用npm都会事半功倍. 1.如何打开package的主页 npm home $packa ...

  5. 【NPM】361- 10个 NPM 使用技巧

    点击上方"前端自习课"关注,学习起来~ 对于一个项目,常用的一些npm简单命令包含的功能有: 初始化一个文件夹( npm init ) 下载npm模块( npm install ) ...

  6. vscode调试npm包技巧

    官网文档:https://code.visualstudio.com/docs/nodejs/nodejs-debugging node调试方法(日志和debuuger):https://blog.r ...

  7. Vue项目搭建完整剖析全过程

    Vue项目搭建完整剖析全过程 项目源码地址:https://github.com/ballyalex 有帮助的话就加个星星呗~!  项目技术栈:vue+webpack+bower+sass+axios ...

  8. Node.js学习看这里:基础、进阶、文章

    Node.js是基于Chrome JavaScript运行时建立的一个平台,实际上它是对Google Chrome V8引擎进行了封装,它主要用于创建快速的.可扩展的网络应用. Node.js采用事件 ...

  9. 深入浅出Node.js(上)

    (一):什么是Node.js Node.js从2009年诞生至今,已经发展了两年有余,其成长的速度有目共睹.从在github的访问量超过Rails,到去年底Node.jsS创始人Ryan Dalh加盟 ...

随机推荐

  1. 【Zookeeper】源码分析之网络通信(二)

    一.前言 前面介绍了ServerCnxn,下面开始学习NIOServerCnxn. 二.NIOServerCnxn源码分析 2.1 类的继承关系 public class NIOServerCnxn ...

  2. 每天一个linux命令(50)--date命令

    在Linux环境中,不管是编程还是其他维护,时间是必不可少的,也经常会用到时间的运算,熟练运用date 命令来表示自己想要表示的时间,肯定可以给自己的工作带来诸多方便. 1.命令格式: date [参 ...

  3. js实现二级联动下拉列表菜单

    二级联动下拉列表菜单的难点在于对后台返回的数据进行解析,不多逼逼,直接上代码 上图是后台返回的数据 实现代码如下: var deviceNotExist = true;//防止数据重复 if(data ...

  4. ERP顾问工作中应该注意哪些工作是不该做的

    1.不要轻易对客户说“不“ 当客户提出一个问题顾问要判断一下,是否属于顾问实施的问题,如果属于顾问实施范畴,而自己又不清楚,这时应把问题纪录下来,和客户解释清楚,回去请教资深顾问给与回答,如果该问题不 ...

  5. Linux下修改系统时区

    使用 /etc/localtime 文件修改时区 先查看一下当前的时区,下面这个例子中使用 UTC 即世界统一标准时区.假设你可能需要改为美国西部标准时间,即太平洋时间. # date Thu Aug ...

  6. AJAX遮罩实例

    function transferip() { var site_list=$("textarea[name='Oldsite']").val(); var ip_list=$(& ...

  7. Rabbitmq集群高可用部署详细

    序言 清风万里的季节,周末本该和亲人朋友一起消遣这烂漫的花花草草,或是懒洋洋的晒个太阳听听风声鸟鸣.无奈工作使然,理想使然,我回到啦公司,敲起啦键盘,撸起啦代码,程序狗的世界一片黯然,一片黯然,愿天下 ...

  8. Spring+SpringMVC+MyBatis+easyUI整合基础篇(十)SVN搭建

    日常啰嗦 前面一篇文章讲了一下版本控制,但其实这一篇并没有打算讲细节的,感觉应该自己去动手弄一下,后来考虑了一下,版本控制真的挺重要的,如果自己实在搭建不好反而不去使用的话,真的有点可惜,当然这些话是 ...

  9. 自学 iOS - 三十天三十个 Swift 项目 第一天

    最近公司项目不是很忙,偶然间看到编程语言排行榜,看到swift 已经排到前10了,然OC排名也越来越后了,感觉要上车了,虽然现在项目都是用OC写的,但是swift是一种趋势.在网上看到"自学 ...

  10. JVM-Java程序性能监控-初级篇

    前篇 - 小伙们都知道,java程序的性能监控主要是针对jvm中heap的监控~ 那么在做压力测试时如何对heap.线程等一系列的指标进行的监控的呢? 首先-你若不懂命令,那么就需要了解一套Java程 ...