11个你应该知道的npm技巧

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

1、如何打开package的主页

npm home $package

运行home命令可以打开此package的主页,例如:npm home lodash,会打开lodash的主页。不管你机器中是否全局安装了此package,甚至是不存在于你当前项目中都可以打开。

2、如何打开package的Github仓库地址

npm repo $package

home命令类似,运行repo命令可以打开此package的Github仓库地址,并且它也不要求你必须安装了此package。例如:npm repo express就打开了express的Github仓库地址。

3、检查package.json中的那些已经过时的依赖

npm outdated

运行此命令,它会去检查npm上的注册信息,看你当前项目中有哪些依赖已经过时了,并以列表的形式展示出来。

Paste_Image.png

4、揪出package.json中没有被用到的packages

npm prune

运行此命令,npm会拿你的package.jsonnode_modules目录进行比对,然后把那些在package.json中没有引用到的package列出来。
还有那些你没有手动添加到package.json或者是执行npm install $package时没有加--save参数的,都会被删掉。

5、锁定你的依赖版本

npm shrinkwrap

使用shrinkwrap命令会在你当前项目中生成一个npm-shrinkwrap.json文件。它会将你当前package.json中引用的依赖版本锁定,当下次执行npm install时,它默认安装的其实是shrinkwrap.json中锁定的依赖版本号。
注意:如果你想让package.jsonshrinkwrap.jsonnode_modules中的依赖版本号保持一致的话,请慎用此功能。

Paste_Image.png

6、使用npm v3 以及 Node.js v4 LTS

npm install -g npm@3

首先你要知道,nodejs v4自带的npm默认版本是v2。执行此命令会将你的npm从v2升级到v3,并且安装的是最新的稳定版本,这样你就可以在nodejs v4的环境中使用npm v3了。

7、如何在npm install -g时,不用再加sudo

npm config set prefix $dir

运行此命令之后,$dir目录就变成了你全局安装依赖时的默认目录,也就是bin目录,以后也就不再需要输入sudo命令了。
需要注意的是,你可能需要使用chown -R $USER $dir命令改变一下此目录的操作权限,并把$dir/bin加入到PATH环境变量中。

8、改变项目的默认保存前缀

npm config set save-prefix="~"

波浪号~:表示当信赖的副版本号有更新时,允许使用npm update进行安装。
脱字符^:表示当依赖的主版本号有更新时,允许使用npm update进行安装。

9、如何在生产环境中剥离所有的devDependencies

当你的项目准备好要切换到生产环境时,安装依赖包时一定要带上--production参数,使用此参数意味着将只会安装你的dependencies依赖,而忽略你的devDependencies依赖,这样可以确保你开发阶段的工具包不会进入到生产环境中。
此外,你也可以设置NODE_ENV环境变量的值为production,这样就可以完全确保项目的devDependencies绝对不会被安装了。

10、请谨慎使用. npmignore

如果你的项目中没有使用.npmignore文件,那么它默认匹配的是.gitignore中的规则以及一些额外的默认配置。
可是如果你在项目中添加了.npmignore文件,.gitignore中的规则就会被忽略,而且这时候你还需要维护两份儿规则文件。

11 、给npm init命令设置自动执行的默认值

我们通常在一个项目中使用npm init来初始化package.json文件。如果你想把经常用到的一些值搞成默认配置,可以使用config set命令。

npm config set init.author.name $name
npm config set init.author.email $email

相应的,如果你想完整的自定义一份儿init脚本,可以这样用:

npm config set init-module ~/.npm-init.js

下面提供一份儿示例供大家参考:

var cp = require('child_process');
var priv;
var USER = process.env.GITHUB_USERNAME || 'YOUR_GITHUB_USERNAME';
module.exports = {
    name: prompt('name', basename || package.name),
    version: '0.0.1',
    private: prompt('private', 'true', function(val) {
        return priv = (typeof val === 'boolean') ? val : !!val.match('true')
    }),
    create: prompt('create github repo', 'yes', function(val) {
        val = val.indexOf('y') !== -1 ? true : false;
        if (val) {
            console.log('enter github password:');
            cp.execSync("curl -u '" + USER + "' https://api.github.com/user/repos -d " + "'{\"name\": \"" + basename + "\", \"private\": " + ((priv) ? 'true' : 'false') + "}' ");
            cp.execSync('git remote add origin ' + 'https://github.com/' + USER + '/' + basename + '.git');
        }
        return undefined;
    }),
    main: prompt('entry point', 'index.js'),
    repository: {
        type: 'git',
        url: 'git://github.com/' + USER + '/' + basename + '.git'
    },
    bugs: {
        url: 'https://github.com/' + USER '/' + basename + '/issues'
    },
    homepage: "https://github.com/" + USER + "/" + basename,
    keywords: prompt(function(s) {
        return s.split(/\s+/)
    }),
    license: 'MIT',
    cleanup: function(cb) {
        cb(null, undefined)
    }
}

12、未完待续……

源文章链接:https://nodesource.com/blog/eleven-npm-tricks-that-will-knock-your-wombat-socks-off/

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,117评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,328评论 1 293
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,839评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,007评论 0 206
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,384评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,629评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,880评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,593评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,313评论 1 243
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,575评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,066评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,392评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,052评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,082评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,844评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,662评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,575评论 2 270

推荐阅读更多精彩内容