[转] 【译】让人倾倒的 11 个 npm trick
【From】 https://segmentfault.com/a/1190000006804410
本文转载自:众成翻译
译者:文蔺
链接:http://www.zcfy.cc/article/1206
原文:https://nodesource.com/blog/eleven-npm-tricks-that-will-knock-your-wombat-socks-off/
有效率地使用 npm 可能会很困难。内置特性堆积如山,尝试学习它们是很艰巨的任务。
就我个人而言,单学习并使用其中一些小 trick 解救了我,从前移除那些未使用的模块时,我只能先删除整个 node_modules 文件夹,接着再用 npm install 重新安装一切。(npm prune,请见本文第四节。)如你所想,这简直要让人发狂了。
我们编了这样一个 trick 列表,使用起来很简单,它们会加速你使用 npm 开发的过程,无论你在做什么项目。
1.打开 package 主页
运行: npm home $package
执行 home 命令会打开 $package 的主页。例如,如果指定 $package 为 lodash,那么就就会打开 Lodash 官网。没有安装(全局/某个项目) package 不影响该命令的使用。
2. 打开 package Github 仓库
运行: npm repo $package
类似前面的 home 命令, repo 命令会打开 $package 的 Github 仓库。如 npm repo express 会打开 Express 的官方仓库地址。同样,不需要安装 package 就能使用。
3. 检查 package 的过时依赖
运行: npm outdated
在项目中,运行 outdated 命令会通过 npm registry 检查是否有过时的 package,并在命令行中打印出当前版本、所需版本以及最新版本。
4. 检查 package.json 中未声明的 package
运行: npm prune
运行 prune 命令,npm CLI 会读取 package.json,并将结果与项目的 /node_modules 目录进行对比,并打印出不在package.json 之列的模块列表。
npm prune 命令接着会拿出这些 package,并移除那些没有手动加到 package.json 中或没有使用 --save 标志安装的 package。
更新: 感谢 @EvanHahn 提醒,一种个人配置可以让 npm prune 提供与 npm 默认方式略有不同的结果。
5. 锁定依赖版本
运行: npm shrinkwrap
在项目中使用 shrinkwrap 命令,会生成一个 npm-shrinkwrap.json 文件,将项目依赖锁定在当前在 node_modules 中使用的特定版本。运行 npm install 时,若发现存在 npm-shrinkwrap.json,则会覆盖列出的依赖以及 package.json 中的任何语义版本范围。
如果需要验证项目中 package.json、 npm-shrinkwrap.json 及 node_modules 的一致性,可以考虑使用 npm-shrinkwrap。
6. 在 Node.js v4 LTS 中使用 npm v3
运行: npm install -g npm@3
使用 npm 全局安装 npm@3,会将 npm v2 升级至 v3。使用 npm v2 LTS 的 Node.js v4 LTS 发布版本(“Argon”)中也是如此。这会在 v4 LTS 中安装 npm v3 的最新稳定版本。(译者注:LTS 指 Long-Term Support, 即提供长期技术支持的版本。)
7. 运行 npm install -g,无需加 sudo
运行: npm config set prefix $dir
$dir 指你想将全局依赖安装在的目录,运行命令,这一来,安装全局模块再也不用使用 sudo,该目录则成为全局的 bin 目录。唯一需要注意的是,确保使用 chown -R $USER $dir 该目录的调整用户权限。
8. 改变所有项目的默认前缀
运行: npm config set save-prefix ~
使用 --save 或 --save-dev 标志安装新 package 时,使用 ~ 比默认的 ^ 行为更加保守。~ 将依赖锁定在小版本(minor version),允许使用 npm update 安装补丁版本。^ 将依赖锁定在主版本,允许使用 npm update更新小版本。
9. 生产环境下去除 devDependencies 依赖
项目准备上到生产环境时,确保使用 --production 标志安装依赖。该标志会安装 dependencies,忽略 devDependencies。这会确保开发所使用的工具及 package 不会进入生产环境。
此外,还可以将 NODE_ENV 环境变量设置为 production,确保 devDependencies 绝不会被安装。
10. 使用 .npmignore 要当心
如果还没使用过 .npmignore,会默认使用 .gitignore 文件,加上一些更健全的默认选项。
很多人不明白都是,一旦在项目中添加了 .npmignore 文件,.gitignore 的规则就会被忽略(好讽刺,出乎意料啊)。结果就是,发布项目时,不得不审查两个文件是否同步,防止敏感信息的泄露。
11. 带默认内容的 npm init
在新项目中运行 npm init 时,可以配置 package.json 细节。如果想设置 npm init 会一直使用的默认工作,可以使用 config set 命令,加上一些额外的参数:
npm config set init.author.name $name
npm config set init.author.email $email
若想彻底自定义初始化脚本,可以指定一个自定义的默认脚本:
`npm config set init-module ~/.npm-init.js``
下面是一个示例脚本,会弹出私有设置项,在需要情况下创建 Github 仓库。确保更改默认的 Github 用户名(YOUR_GITHUB_USERNAME),作为 Github 用户名环境变量的 fallback 值。
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)
}
}
最后一点...
若想学习更多关于 npm、Node.js、JavaScript、Docker、Kubernetes 以及 Electron 等等等等,可以在 Twitter、 上关注 @NodeSource。我们一直都在,很乐意收到你的消息!
译者注
更多内容,欢迎关注个人博客 http://www.wemlion.com/。
[转] 【译】让人倾倒的 11 个 npm trick的更多相关文章
- 【译】Flink + Kafka 0.11端到端精确一次处理语义的实现
本文是翻译作品,作者是Piotr Nowojski和Michael Winters.前者是该方案的实现者. 原文地址是https://data-artisans.com/blog/end-to-end ...
- [mybatis]Example的用法 标签: mybatis 2017-05-21 21:46 651人阅读 评论(11)
Example类是什么? Example类指定如何构建一个动态的where子句. 表中的每个non-BLOB列可以被包括在where子句中. 例子是展示此类用法的最好方式. Example类可以用来生 ...
- svn总结 标签: svn开源软件 2015-05-09 17:31 513人阅读 评论(11) 收藏
说到SVN,就不得不说CVS,CVS 是一个C/S系统,是一个常用的代码版本控制软件.主要在开源软件管理中使用.与它相类似的代码版本控制软件有subversion.多个开发人员通过一个中心版本控制系统 ...
- 【译】 AWK教程指南 11递归程序
awk 中除了函数的参数列表(Argument List)上的参数(Arguments)外,所有变量不管于何处出现,全被视为全局变量.其生命持续至程序结束——该变量不论在function外或 func ...
- 泛化之美--C++11可变模版参数的妙用
1概述 C++11的新特性--可变模版参数(variadic templates)是C++11新增的最强大的特性之一,它对参数进行了高度泛化,它能表示0到任意个数.任意类型的参数.相比C++98/03 ...
- C++11模版元编程
1.概述 模版元编程(template metaprogram)是C++中最复杂也是威力最强大的编程范式,它是一种可以创建和操纵程序的程序.模版元编程完全不同于普通的运行期程序,它很独特,因为模版元程 ...
- Kafka设计解析(二十二)Flink + Kafka 0.11端到端精确一次处理语义的实现
转载自 huxihx,原文链接 [译]Flink + Kafka 0.11端到端精确一次处理语义的实现 本文是翻译作品,作者是Piotr Nowojski和Michael Winters.前者是该方案 ...
- c++11 右值的学习
从4行代码看右值引用 概述 简单的左值和右值的判断就是 看是否可以取得地址 可取得地址 是左值 不能则 是右值! c++98/03中的左值引用是这样的: int i = 0; int& ...
- 标准C程序设计七---11
Linux应用 编程深入 语言编程 标准C程序设计七---经典C11程序设计 以下内容为阅读: <标准C程序设计>(第7版) 作者 ...
随机推荐
- Luogu 4069 [SDOI2016]游戏
BZOJ 4515 树链剖分 + 李超线段树 要求支持区间插入一条线段,然后查询一个区间内的最小值.可以使用李超线段树解决,因为要维护一个区间内的最小值,所以每一个结点再维护一个$res$表示这个区间 ...
- nodelet的理解
1.介绍 nodelet包可以为在相同进程中的多个算法之间实现零拷贝的传输方式. 这个包也提供了实现一个nodelet所需的nodelet基类以及用于实例化nodelet的NodeletLoader类 ...
- poj 1611 The Suspects(第一道并查集)
题意: 有N个学生,编号为0-n-1,现在0号学生感染了非典,凡是和0在一个社团的人就会感染, 并且这些人如果还参加了别的社团,他所在的社团照样全部感染,社团个数为m,求感染的人数. 输入: n代表人 ...
- Load-time relocation of shared libraries
E原文地址:http://eli.thegreenplace.net/2011/08/25/load-time-relocation-of-shared-libraries/ This article ...
- Struts2获取Action中的数据
当我们用Struts2框架开发时,经常有要获取jsp页面的数据或者在jsp中获取后台传过来的数据(Action),那么怎么去获取自己想要的数据呢? 后台获取前端数据: 在java程序中生成要获取字段的 ...
- 编写高质量代码改善C#程序的157个建议——建议32:总是优先考虑泛型
建议32:总是优先考虑泛型 泛型的优点是多方面的,无论泛型类还是泛型方法都同时具备可重用性.类型安全性和高效率等特性,这是非泛型和非泛型方法无法具备的. 以可重用性为例: class MyList { ...
- 【Head First Java 读书笔记】(二)类与对象
前篇当中,代码都放在main()里面,那根本不是面向对象的做法. 椅子大战(对象如何改变你的一生) 程序规格: 在图形接口画出四方形,圆形和三角形,当用户点选图形时,图形需要顺时针转360度并依据形状 ...
- ColorMatrixFilter色彩矩阵滤镜;
包 flash.filters 类 public final class ColorMatrixFilter 继承 ColorMatrixFilter BitmapFilter Object 使用 ...
- mysql索引及多表查询
注意where,group by ,having,order by, limit 等的顺序. 主表是被绑定的表,子表是添加了外键了的表,注意,在创建表的时候可以添加外键,也可以创建完了以后添加外键. ...
- create-react-app设置proxy反向代理不起作用
在CRA2.X升级以后对proxy的设置做了修改,引用官方升级文档: Object proxy configuration is superseded by src/setupProxy.js To ...