NPM使用技巧

摘要:
如果你是一名JavaScript开发人员,你不会对NPM感到陌生,它既是一个平台,也是一个工具。以下是将NPM用作工具的一些提示。一些国内服务器通常无法或拖慢一些被阻止的数据包。此时,我们可以尝试淘宝NPM形象。

如果你是一个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使用技巧》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Cesium 坐标系转换基于Cmake+QT+VS的C++项目构建开发编译简明教程下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Elasticsearch增删改查 之 —— Update更新

更新操作,一般用这个的,应该不会很多吧!ES本身还是一个倾向于查询检索的框架,对于这种更新的操作,太过频繁总归是不好的。不过阅读本篇后,你可以使用Script对所有的文档执行更新操作,也可以使用doc对部分文档执行更新,也可以使用upsert对不存在的文档执行添加操作。 更新 Update更新操作允许ES获得某个指定的文档,可以通过脚本等操作对该文档进行更...

webpack安装&指定版本安装&遇到的问题

1.安装nodejs,安装完成,cmd命令行中输入node -v 查看版本号,版本号显示则说明安装成功2.npm包管理器是集成在node中的,输入 npm -v,显示npm版本号3.创建package.json文件,输入命令 npm init,工程目录下就会生成一个package.json文件(全局安装webpack) 4.安装webpack,输入命令 n...

VMware三个版本号workstation、server、esxi的差别

VMware三个版本号 workstation: 单机级。用在个人桌面系统中。须要操作系统支持 servier:工作组级,用于服务器。须要操作系统支持 esxi:企业级,用于服务器,不须要操作系统支持 workstation、server:是Windows或者Linux上的一种应用程序,必须先安装主机操作系统才干安装workstaion或server,...

[0] C#软件项目版本号的命名规则及格式介绍

版本控制比较普遍的 3 种命名格式 :  一、GNU 风格的版本号命名格式 :  主版本号 . 子版本号 [. 修正版本号 [. 编译版本号 ]]  英文对照 : Major_Version_Number.Minor_Version_Number[.Revision_Number[.Build_Number]]  示例 : 1.2.1, 2.0, 5.0....

git的回滚与撤销【reset and revert】

git的工作流程-- 3个区域 工作区:我们可以看到的文件内容  在操作 git add 之前的!! 缓存区:是不可见的  已经git add操作,还没git commit -m “”操作 历史区:将缓存区中,临时存储的文件,生成历史版本  已经git commit -m 基本工作流程: 工作区编辑 ---> 存储缓存区 ---> 历史版本...

Git入门常用命令

Git是什么 Git是一个开源的[分布式][版本控制系统],用于敏捷高效地处理任何或小或大的项目,事实上它是与GitHub搭配起来使用的。Git 是Linus Torvalds为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。 分布式相比于集中式的最大区别在于开发者可以提交到本地,每个开发者通过克隆(git clone),在本地机器上拷...