资讯专栏INFORMATION COLUMN

【译】让人倾倒的 11 个 npm trick

Tangpj / 3277人阅读

摘要:没有安装全局某个项目不影响该命令的使用。该标志会安装,忽略。这会确保开发所使用的工具及不会进入生产环境。结果就是,发布项目时,不得不审查两个文件是否同步,防止敏感信息的泄露。确保更改默认的用户名,作为用户名环境变量的值。

本文转载自:众成翻译
译者:文蔺
链接: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 的主页。例如,如果指定 $packagelodash,那么就就会打开 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.jsonnpm-shrinkwrap.jsonnode_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/。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/80292.html

相关文章

  • 面试宝典

    摘要:有谈谈面试与面试题对于前端面试的一些看法。动态规划算法的思想及实现方法帮大家理清动态规划的解决思路以及原理方法前端经典面试题从输入到页面加载发生了什么这是一篇开发的科普类文章,涉及到优化等多个方面。极客学院前端练习题道练习题,面试季练练手。 由数据绑定和排序引入的几个 JavaScript 知识点 在 JavaScript 的数据绑定和做简单的表格排序中遇到的几个知识点 [[JS 基础...

    neu 评论0 收藏0
  • 2017-08-12 前端日报

    摘要:前端日报精选中的操作符译理解教程构建一个预渲染友好的应用示例译如何学习开发如何编写轻量级框架中文译后台运行实战手册分析器入门博客众成翻译一款简单到极致的数据流框架使用组件的四个技巧关键请求教程奇舞周刊第期前端路上的旅行如何只用完 2017-08-12 前端日报 精选 JSX中的spread操作符【译】理解Service WorkerVue.js教程: 构建一个预渲染SEO友好的应用示例...

    zhiwei 评论0 收藏0
  • [] Webpack——令人困惑地方

    摘要:处理文件的扩展名很多的配置文件都有一个属性,然后就像下面代码所示有一个空字符串的值。空字符串在此是为了一些在文件时不带文件扩展名的表达式,如或者译者注实际就是自动添加后缀,默认是当成文件来查找路径就这么多。 原文 Webpack—The Confusing Partsissue讨论 Webpack是目前基于React和Redux开发的应用的主要打包工具。我想使用Angular 2或其他...

    anRui 评论0 收藏0
  • 】Python优雅技巧

    摘要:你可以进行如下操作需要注意的是这个窍门只适用于。在中就不需要进行操作了,因为它已经默认进行了。这里有几个例子可以供你参考译文出处本文根据的所译,整个译文带有我自己的理解与思想,如果译得不好或有不对之处还请同行朋友指点。 枚举 不要这么做: i = 0 for item in iterable: print i, item i += 1 而是这样: for...

    legendaryedu 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<