[转] 【译】让人倾倒的 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 [email protected]

使用 npm 全局安装 [email protected],会将 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/

时间: 2024-08-06 07:56:41

[转] 【译】让人倾倒的 11 个 npm trick的相关文章

【译】 AWK教程指南 11递归程序

awk 中除了函数的参数列表(Argument List)上的参数(Arguments)外,所有变量不管于何处出现,全被视为全局变量.其生命持续至程序结束--该变量不论在function外或 function内皆可使用,只要变量名称相同所使用的就是同一个变量,直到程序结束.因递归函数内部的变量,会因它调用子函数(本身)而重复使用,故编写该类函数时应特别留心. 例如:执行 awk ' BEGIN { x = 35 y = 45 test_variable( x ) printf("Return t

人月神话-11章未雨绸缪

试验性工厂和增大规模 开发一个更灵巧或者更好的系统.系统的丢试图和重新设计可以一步完成,也可以一块块地实现. 为舍弃而计划,无论如何,你一定要这样做. 唯一不变的就是变化本身 目标上的一些变化无可避免,事先为它们做准备总比假设它们不会出现在好得多.不但目标上的变化不可避免,而面设计策略和技术上的变化也不可避免. 为变更设计系统 细致的模块化.可扩展的函数.精确完整的模块间接口设计和完备的文档. 变更的阶段化是一种必要的技术.每个产品都应该有数字版本号,每个版本都应该有自己的日程表和冻结日期,在此

五十万年薪的人是怎么过日子的?

五十万年薪的人是怎么过日子的?修改 由于各行各业及自己本身原有基础不一样,可能大家的回答没有横向可比性,希望大家能够在回答中包含以下信息:1 自己年龄,从事的行业岗位,属于什么职级2 受过的教育水平3 父母能够在你刚开始工作时提供多大帮助4 自己在哪线城市工作 关于生活状态的其他问题:你认为怎样的生活状态是最理想的?年收入50元的人是怎么过日子的?一万年薪的人都是怎么过日子的?十万年薪的人都是怎么过日子的?百万年薪的人都是怎么过日子的?千万年薪的人都是怎么过日子的?修改 举报9 条评论 分享 •

C++11模版元编程

1.概述 模版元编程(template metaprogram)是C++中最复杂也是威力最强大的编程范式,它是一种可以创建和操纵程序的程序.模版元编程完全不同于普通的运行期程序,它很独特,因为模版元程序的执行完全是在编译期,并且模版元程序操纵的数据不能是运行时变量,只能是编译期常量,不可修改,另外它用到的语法元素也是相当有限,不能使用运行期的一些语法,比如if-else,for等语句都不能用.因此,模版元编程需要很多技巧,常常需要类型重定义.枚举常量.继承.模板偏特化等方法来配合,因此编写模版元

据说是爱因斯坦出的一道思考题,只有2%的人可以解出!

问题描述:有五个不同颜色的房间排成一排,每个房间里分别住着一个不同国籍的人: 每个人都在喝一种特定品牌的饮料,抽一种特定品牌的烟,养一种特定的宠物: 没有任意两个人抽相同品牌的香烟,或喝相同品牌的饮料,或养相同的宠物.问题:住在那种颜色的房间里的哪国人在养鱼作为宠物?为了解题,爱因斯坦给出如下15条线索:1.英国人住在红色的房子里:2.瑞典人养狗作为宠物:3.丹麦人喝茶:4. 绿房子紧挨着白房子,在白房子的左边:5. 绿房子的主人喝咖啡:6. 抽Pall Mall牌香烟的人养鸟:7. 黄色房子里

泛化之美--C++11可变模版参数的妙用

1概述 C++11的新特性--可变模版参数(variadic templates)是C++11新增的最强大的特性之一,它对参数进行了高度泛化,它能表示0到任意个数.任意类型的参数.相比C++98/03,类模版和函数模版中只能含固定数量的模版参数,可变模版参数无疑是一个巨大的改进.然而由于可变模版参数比较抽象,使用起来需要一定的技巧,所以它也是C++11中最难理解和掌握的特性之一.虽然掌握可变模版参数有一定难度,但是它却是C++11中最有意思的一个特性,本文希望带领读者由浅入深的认识和掌握这一特性

4号团队-团队任务3:每日立会(11月26日至12月7日)

团队序号:04 开发的软件名称:飞机大战 团队信息: 团队只有UI设计师王菊,产品经理王擎,软件工程师.共三人 每日例会11月26日至12月7号的链接: 26日   https://www.cnblogs.com/jbbrnbs/p/10028609.html 27日   https://www.cnblogs.com/jbbrnbs/p/10028671.html 28日   https://www.cnblogs.com/jbbrnbs/p/10030865.html 原文地址:https:

Linux下PHP加速器APC的安装与配置

我已经感知到他属于那">我已经感知到他属于那 个时代的">个时代的 受难者">受难者 许我和">许我和 他是社会">他是社会 同类">同类 许他随口哼唱出来">许他随口哼唱出来 歌--那">歌--那 些名歌">些名歌 情歌">情歌 民歌--我太熟悉">民歌--我太熟悉 太久违了">太久违了 我为自己庆幸"&

#研发解决方案介绍#基于ES的搜索+筛选+排序解决方案

郑昀 基于胡耀华和王超的设计文档 最后更新于2014/12/3 关键词:ElasticSearch.Lucene.solr.搜索.facet.高可用.可伸缩.mongodb.SearchHub.商品中心 本文档适用人员:研发和运维 提纲: 曾经的基于MongoDB的筛选+排序解决方案 MongoDB方案的缺陷 看中了搜索引擎的facet特性 看中了ES的简洁 看中了ES的天生分布式设计 窝窝的ES方案 ES的几次事故和教训 ES自身存在的问题 首先要感谢王超和胡耀华两位研发经理以严谨治学的研究精