有关npm rum的3个简洁技巧

【编者按】本文作者为来自 MongoDB 的 NodeJS 工程师 Valeri Karpov。Valeri 专注于维护常见的 Mongoose ODM,是《Professional AngularJS》一书的作者。本文由 OneAPM 工程师编译呈现,以下为正文。

大多数Node.js 开发人员都将npm用做包管理器。然而,npm同样也是一个强大的task runner,能够代替gulp。npm run命令让你在package.jso上定义客制化脚本,这样一来就简化了复杂的与节点相关的 shell脚本,使其变成单行。笔者将在本文讲述常见的npm run使用案例,包括使用npm run,通过Babel和Browserify输入ES6浏览器代码。

设置环境变量和标志

Node.js有几个方便的配置选项,使用环境变量和命令行标志(比如过去用来启用0.12.x版中ES2015特性的古老的harmony标志)就可以设置。npm run命令,尤其是npm start指令,可以让你在运行前设置任何应用所需的标志。

比如说, NODE_PATH 环境变量能让你在require()函数的模块搜索路径上添加额外目录。换句话说,如果你的项目中有一个包含源代码的lib目录和一个包含测试代码的test目录。并且,你在test/e2e/my_feature/my_feature.test.js中有个测试,试图require()某个声明在lib/server/my_feature/utils.js中的函数。这就会涉及脆弱的require(‘../../../lib/server/my_feature_utils’)命令。每次目录更改时,该命令便会中断。然而,如果你运行 env NODE_PATH=./ node test/e2e/my_feature/my_feature.test.js, require()便知道查看当前目录。这样就可以 用require(‘lib/server/my_feature/utils’)进行替代。

遗憾的是,你设置的每一个环境变量和标志都会额外增加启动应用的复杂性。可以确定的是,如果你需要设置17个环境变量和标志来启动应用,肯定会遗漏一两个。如果你的应用依赖于 env NODE_PATH=./和ES2015 proxies(后者直到本文写稿时,仍隐藏在–harmony_proxies标志后)。那么,你可以按照下文所示,在.json包文件中定义一个 start脚本:

{

"scripts": {

"start": "env NODE_PATH=./ node --harmony_proxies index.js"  } }

现在,如果运行npm start(npm run start的简称),npm会运行start脚本,启动带有特殊配置选项的应用。

命令行快捷键

我们知道,让用户运行 npm install –g非常麻烦。或许,你已经听说,即将面世的gulp4.0与gulp3.x.完全不兼容。由于全球有许多人安装了gulp,因此package.json没有办法强制遍布全球的软件包,所以,许多用户将不得不面临选择:到底要哪一个版本的gulp。

在package.json中将gulp列作devDependency会好很多,但是,之后你就必须运行/node_modules/.bin/gulp watch而并非gulp watch,这样十分麻烦。这就是npm run大展身手的地方了。它能将 /node_modules/.bin 加到你的PATH中。换句话说,如果你把gulp3.8列作 devDependency,就能访问package.json脚本上的gulp可执行文件,而不需要用户运行npm install gulp –g。

{
 "scripts": {
"watch": "gulp watch" }}

现在,npm run watch 是/node_modules/.bin/gulp watch的快捷方式。使用mocha也可以达到同样的效果。

{

 "scripts": {

 "test": "mocha -r nyan test/*.test.js"  } }

现在,npm test(和npm run test一样)是在test目录中使用nyan cat指示器运行所有mocha测试的快捷方式。

Mocha可执行文件同样也有一些简洁的命令行标志。比如说,grep (简称 -g )mocha标志让你只运行名称和给定正则表达式匹配的测试。在npm >= 2.14.0中,你可以使用 – 传输其他标志为mocha。例如,下面的命令作用是相同的。

# This command... npm test -- -g "login.fails"  # is the same thing as this one  /node_modules/.bin/mocha -r nyan test/.test.js -g "login.*fails"

gulp的备选方案

作为强大的流构建系统,gulp能够让你并行化编译文件。这是一个很棒的工具,但是,对于某些应用程序,可能有点大材小用,尤其当你的团队不太了解Node.js流时。在许多情况下,npm run指令可以作为性能较温和的gulp替代物。举个例子来说,假如在example.js中有一些ES2015代码,你想通过babel transpile,之后导入browserify ,在浏览器中使用。

 'use strict';  const co = require('co')

  /node_modules/.bin/mocha -r nyan test/.test.js -g "login.fails"

co(function*() {

  console.log('Hello, world!');

如果想用gulp进行编译,你可能会用到gulp-babel和gulp-browserify npm两种模型,为gulp包装babel和browserify。然而,babel和browserify有命令行界面,因此你可以使用Unix-style pipes编译这一文件。注意,下面的例子要求使用babel 5.x,不适用于babel 6.

 'use strict'; /node_modules/.bin/browserify example.js | ./node_modules/.bin/babel > ./bin/example.js

再说一次,/node_modules/.bin这部分很讨人厌。值得庆幸的是,如果你在package.json中定义编译脚本,使用 npm run编译也能够取得同样的效果。

 { "scripts": { "compile": "browserify example.js | babel > ./bin/example.js}
}

文末思考

npm run指令让npm成为多功能的task runner,而不只是任务管理器。好的node.js应用凭借npm start和 npm test明确了如何运行应用以及如何测验。同样,npm run 让可执行npm模块(gulp、mocha、karma等)用作devDependencies更加方便。你甚至可以借助 npm run和Unix流来运行构建程序,无需gulp或者grunt等构建系统的帮助。从概念上讲,npm run 与package.json 中的scripts部分应该定义如何为你的应用完成最常见的指令行任务,如启动应用、检测和运行各种transpilers。

本文转自 OneAPM 官方博客

原文地址:https://strongloop.com/strongblog/3-neat-tricks-with-npm-run/

时间: 2024-10-28 14:54:32

有关npm rum的3个简洁技巧的相关文章

NPM使用技巧

如果你是一个JavaScript系的开发者,一定不会陌生NPM,它既是一个平台,也是一个工具.在这个平台上,我们能够使用其他开发者提供的功能代码,当然我们也能将我们自己代码提交到这里分享给世界上的开发者. 以下记录一些NPM作为工具的一些使用技巧. npmrc .npmrc 做为npm的配置文件,它可以定义在多个地方. ~/.npmrc  用户根目录,根目录内所有的npm指令都会查询到该配置 /path/to/npm/npmrc  npm内建配置文件 ./.npmrc  当前项目根目录,用于配置

使用 Google 抓取方式,测试 React 驱动的网站 SEO

本文讲的是使用 Google 抓取方式,测试 React 驱动的网站 SEO, 我最近进行了一项测试,它有关客户端渲染的网站是否能避免被搜索引擎的机器人爬取内容.就如我此文所述,React 并不会破坏搜索引擎的索引. 现在,我开始实施我的下一个步骤.为了了解 Google 到底能爬取和索引哪些内容,我建立了一个 React 的沙盒项目. 建立一个小型的网页应用程序 我的目标只是建立一个单纯的 React 应用程序,用最少的时间配置 Babel, webpack 和其他一些工具.之后,我会尽可能快

技巧小结:如何让 CSS 代码简洁而易于编写?

css|技巧 如何让 CSS 代码简洁而易于编写?这恐怕是许多开发者都关心的问题.我想,大概没有什么魔法,可以保证一下就把你的样式表缩小到百分之多少,但合理的 CSS 编码与组织技巧,的确能够帮助你的更有效率地写出更清晰高效的代码,自然,样式表大小的缩减还能减少下载的时间. 组织你的样式表 尽管我们有种种 CSS 的开发工具,比如 TopStyle,比如 StyleMaster,它们可以让你对当前这个样式表里面定义了哪些规则,涉及哪些 class,哪些 ID 一目了然,但这不等于说你的样式表就组

简洁至上的Web设计 - 创意要素及设计技巧

周五了,将今次的译文发上来,以纪念一周的过去.眼看着天气突然就这么热了起来,坐在空调风口下面不到一米的距离内,周身热乎乎的,双眼也似有若无的迷离了起来,这是闹那样呢. 这周有两大喜事.一是终于不用每天回家一直泡在iOS Wow Factor一书的翻译工作当中了,具体情况会在接下来一篇文章当中进行嘀咕.第二是公司UED新总监的到任.看到了一些希望在里面,这两件事都是如此.我们来看正题吧. 简洁,不等于简单.这与弹琴是一个道理,你也许有能力弹得很快,但你并不需要在所有地方都弹得这么快.在很多时候,让

简洁的 Bash Programming 技巧续篇

简洁的 Bash Programming 技巧系列文章专门介绍 Bash 编程中一些简洁的技巧,帮助大家提高平时 Bash 编程的效率.继上一篇文章发布后,收到很多读者的反响,所以我决定继续将自己学到的一些新的技巧更新在这篇续篇中,当然也希望其它同学也能一起分享你们的技巧.续篇中有部分的内容已经偏离bash编程了,而是命令行下的技巧,题目我暂时不改,请见谅. 1. bash中alias的使用 alias其实是给常用的命令定一个别名,比如很多人会定义一下的一个别名: alias ll='ls -l

提升你的开发效率,10 个 NPM 使用技巧

对于一个项目,常用的一些npm简单命令包含的功能有:初始化一个文件夹( npm init ),下载npm模块( npm install ),创建测试( npm test ) 和自定义脚本( npm run ).但是,进一步了解一些 npm 的使用技巧可以彻底改变你的日常开发任务. 注: 如果你需要关于初学npm的参考,可以参阅我们的初学者指南.如果你对 npm 和 Yarn 之间的差异感到困扰,可以参阅我们发表的文章:Yarn vs npm:你需要知道的一切 获取帮助 npm 文档 和 CLI

个人总结的一些JavaScript技巧、实用函数、简洁方法、编程细节_javascript技巧

变量转换 var myVar = "3.14159", str = ""+ myVar,// to string int = ~~myVar, // to integer float = 1*myVar, // to float bool = !!myVar, /* to boolean - any string with length and any number except 0 are true */ array = [myVar]; // to array

js导出excel文件的简洁方法(推荐)_javascript技巧

用js可以直接在jsp页面导出数据到excel文件,方法很简洁,如下: 第一,准备一个jsp(暂时取名为export.jsp),内容为: <%@ page contentType="text/html; charset=GBK"%> <% String context = request.getParameter("sContent"); response.setHeader("Content-type","appli

【ApsaraSRE专题推荐--2期】简洁的 Bash Programming 技巧

简洁的 Bash Programming 技巧 简洁的 Bash Programming 技巧 简洁的 Bash Programming 技巧续篇 Bash 补全编程