[NPM] Pull out npm scripts into another file with p-s
A technique you might use once you start having lots of npm scripts is to use a node package that allows you to define your scripts in an external package-scripts.js file. By pulling out your scripts it can help with organization, enable better comments, provide shortcuts, and more.
Install:
npm i -D p-s
Run:
node_modules/.bin/p-s init
Then if we check package.json file, we found that the scripts from:
"scripts": {
"start": "node index.js",
"poststart": "npm run build && npm run server",
"pretest": "npm run lint",
"test": "BABEL_ENV=test mocha spec/ --require babel-register",
"cover": "nyc npm t",
"postcover": "rm -rf .nyc_output",
"cover:open": "open coverage/index.html",
"lint": "npm-run-all lint:**",
"lint:js": "eslint --cache --fix ./",
"lint:css": "stylelint '**/*.scss' --syntax scss",
"lint:css:fix": "stylefmt -R src/",
"watch": "npm-run-all --parallel watch:*",
"watch:test": "npm t -- --watch",
"watch:lint": "onchange 'src/**/*.js' 'src/**/*.scss' -- npm run lint",
"build": "npm-run-all build:*",
"prebuild": "rm -rf public/$npm_package_version",
"build:html": "pug --obj data.json src/index.pug --out public/$npm_package_version/",
"build:css": "node-sass src/index.scss | postcss -c .postcssrc.json | cssmin > public/$npm_package_version/index.min.css",
"build:js": "mustache data.json src/index.mustache.js | uglifyjs > public/$npm_package_version/index.min.js",
"server": "npm-run-all --parallel server:*",
"server:create": "http-server public/$npm_package_version -p $npm_package_config_port",
"server:launch": "open http://localhost:$npm_package_config_port",
"prepush": "npm run lint"
},
to:
"scripts": {
"start": "nps",
"test": "nps test"
},
We still can run 'npm start' & 'npm t', the actual scripts points to package-script.js file:
module.exports = {
scripts: {
default: 'node index.js',
poststart: 'npm run build && npm run server',
pretest: 'npm run lint',
test: 'BABEL_ENV=test mocha spec/ --require babel-register',
cover: {
default: 'nyc npm t',
open: 'open coverage/index.html'
},
postcover: 'rm -rf .nyc_output',
lint: {
default: 'npm-run-all lint:**',
js: 'eslint --cache --fix ./',
css: {
default: 'stylelint \'**/*.scss\' --syntax scss',
fix: 'stylefmt -R src/'
}
},
watch: {
default: 'npm-run-all --parallel watch:*',
test: 'npm t -- --watch',
lint: 'onchange \'src/**/*.js\' \'src/**/*.scss\' -- npm run lint'
},
build: {
default: 'npm-run-all build:*',
html: 'pug --obj data.json src/index.pug --out public/$npm_package_version/',
css: 'node-sass src/index.scss | postcss -c .postcssrc.json | cssmin > public/$npm_package_version/index.min.css',
js: 'mustache data.json src/index.mustache.js | uglifyjs > public/$npm_package_version/index.min.js'
},
prebuild: 'rm -rf public/$npm_package_version',
server: {
default: 'npm-run-all --parallel server:*',
create: 'http-server public/$npm_package_version -p $npm_package_config_port',
launch: 'open http://localhost:$npm_package_config_port'
},
prepush: 'npm run lint'
}
};
Now there are some problems we need to fix before it can run all the scripts.
1. Add help command:
Now if we run
npm run /*
start
nps
test
nps test
*/
We can only see two scripts.
But we can run:
npm start -- --help
Then we able to see all the scripts:
For a more convenient way, we can create a help script:
"help": "npm start -- --help"
or just:
"help": "nps --help"
2. We can add "description" to package-scripts.js to make each command more clear why to use.
So for example, I can "test" script in package-scripts.js from:
test: 'BABEL_ENV=test mocha spec/ --require babel-register',
to:
test: {
script: 'BABEL_ENV=test mocha spec/ --require babel-register',
description: 'Run the mocha tests'
},
Now if we run help command:
test - Run the mocha tests - BABEL_ENV=test mocha spec/ --require babel-register
We can see the description also.
3. There is no 'npm-run-all' package for 'p-s'
For example:
lint: {
default: 'npm-run-all lint:**',
js: 'eslint --cache --fix ./',
css: {
default: 'stylelint \'**/*.scss\' --syntax scss',
fix: 'stylefmt -R src/'
}
},
We can change to:
lint: {
default: 'nps lint.js,lint.css,lint.fix',
js: 'eslint --cache --fix ./',
css: {
default: 'stylelint \'**/*.scss\' --syntax scss',
fix: 'stylefmt -R src/'
}
},
Another example:
watch: {
default: 'npm-run-all --parallel watch:*',
test: 'npm t -- --watch',
lint: 'onchange \'src/**/*.js\' \'src/**/*.scss\' -- npm run lint'
},
'nps' understand '--parallel' flag, so we can change this script to:
watch: {
default: 'nps watch.test,watch.lint --parallel',
test: 'npm t -- --watch',
lint: 'onchange \'src/**/*.js\' \'src/**/*.scss\' -- npm run lint'
},
4. 'nps' doesn't support 'pre-' or 'post-' scripts.
For the post- scripts: using '&&'
For example:
default: 'node index.js',
poststart: 'npm run build && npm run server',
We have poststart, we can change to:
default: 'node index.js && nps build,server',
For the pre- scripts:
For example:
pretest: 'npm run lint',
test: {
script: 'BABEL_ENV=test mocha spec/ --require babel-register',
description: 'Run the mocha tests'
},
we can change to:
test: {
default: {
script: 'nps lint,test.run',
description: 'Run the mocha tests'
},
run: 'BABEL_ENV=test mocha spec/ --require babel-register',
},
Example2:
change from:
cover: {
default: 'nyc npm t',
open: 'open coverage/index.html'
},
postcover: 'rm -rf .nyc_output',
to:
cover: {
default: 'nyc npm t && nps cover.clean',
open: 'open coverage/index.html',
clean: 'rm -rf .nyc_output',
},
Example3:
From:
build: {
default: 'nps build.html,build.css,build.js',
html: 'pug --obj data.json src/index.pug --out public/$npm_package_version/',
css: 'node-sass src/index.scss | postcss -c .postcssrc.json | cssmin > public/$npm_package_version/index.min.css',
js: 'mustache data.json src/index.mustache.js | uglifyjs > public/$npm_package_version/index.min.js'
},
prebuild: 'rm -rf public/$npm_package_version',
to:
build: {
default: 'nps build.clean,build.html,build.css,build.js',
clean: 'rm -rf public/$npm_package_version',
html: 'pug --obj data.json src/index.pug --out public/$npm_package_version/',
css: 'node-sass src/index.scss | postcss -c .postcssrc.json | cssmin > public/$npm_package_version/index.min.css',
js: 'mustache data.json src/index.mustache.js | uglifyjs > public/$npm_package_version/index.min.js'
},
Example4:
prepush: 'npm run lint'
Move to package.json file:
"prepush": "nps lint"
So now if you want to run any script, you can do:
npm start lint
npm start build.js
Aslo nps provides shortcut to run script:
npm start build.html // the same as npm start b.h
If you install 'p-s' grobally, you can run any command by:
nps lint
nps build
[NPM] Pull out npm scripts into another file with p-s的更多相关文章
- NPM 使用及npm升级中问题解决
NPM是随同NodeJS一起安装的包管理工具,能解决NodeJS代码部署上的很多问题,常见的使用场景有以下几种: 允许用户从NPM服务器下载别人编写的第三方包到本地使用. 允许用户从NPM服务器下载并 ...
- [转] 合理使用npm version与npm dist-tag详解
第一步:发布第一个稳定版本 npm publish//1.0.0 第二步:修改文件继续发布第二个版本 git add -A && git commit -m "c" ...
- npm link & run npm script
npm link & run npm script https://blog.csdn.net/juhaotian/article/details/78672390 npm link命令可以将 ...
- [转]adb pull Permission denied及no such file错误
adb pull Permission denied及no such file错误 http://www.the8m.com/blog/article/javadk/adbpull.html XP系 ...
- angular2 学习笔记 ( angular cli & npm version manage npm 版本管理 )
更新 : 2017-05-05 现在流行 Yarn ! 它是 facebook google 推出的东西. 算是补助 npm 做的不够好的地方. 源码依然是发布去 npm,只是下载接口换掉罢了哦. n ...
- 【npm】利用npm安装/删除/发布/更新/撤销发布包
什么是npm? npm是javascript的包管理工具,是前端模块化下的一个标志性产物 简单地地说,就是通过npm下载模块,复用已有的代码,提高工作效率 1.从社区的角度:把针对某一特定问题 ...
- npm WARN build `npm build` called with no arguments. Did you mean to `npm run-script build`?
跑npm build结果如下: npm WARN build `npm build` called with no arguments. Did you mean to `npm run-script ...
- npm汇总:npm命令 + 实用插件
一.npm常用命令,以便查阅: npm install //运行npm install可根据package.json的配置自动安装所有依赖包 npm uninstall //卸载依赖,如n ...
- npm 取消代理 npm config delete proxy
今天在安装electron时设置了代理,发现再npm install 安装别的总是装不上,只好取消代理. npm 取消代理 npm config delete proxy
随机推荐
- elasticsearch cluster 详解
上一篇通过clusterservice对cluster做了一个简单的概述, 应该能够给大家一个初步认识.本篇将对cluster的代码组成进行详细分析,力求能够对cluster做一个更清晰的描述.clu ...
- JQuery操作数组函数 push(),pop(),unshift(),shift()
1.array.push() :在数组尾部添加新的元素,并返回新的数组长度. 2.array.unshift() :在数组头部添加新的元素,并返回新的数组长度.[听说IE浏览器不支持] 3.array ...
- 学习笔记:_lodash.js常用函数
_lodash.js 文档:https://www.lodashjs.com/docs/4.17.5.html _.compact(array) 创建一个移除了所有假值的数组 什么是假值?false, ...
- 14、序列化操作,类的保存和dict转JSON
在程序运行的过程中,所有的变量都是在内存中,比如,定义一个dict: d = dict(name='Bob', age=20, score=88) 可以随时修改变量,比如把name改成'Bill',但 ...
- Android SimpleAdapter
1.MainActivity.java public class MainActivity extends Activity { private ListView listView; private ...
- cocos2dx--vs2012+lua开发环境搭建
cocos2dx版本号:cocos2dx2.2.3 lua插件:babelua 1.5.3 下载地址:http://pan.baidu.com/s/1i3mPD8h 第一步:先关闭vs,双击下载下来 ...
- iOS开发RunLoop学习:一:RunLoop简单介绍
一:RunLoop的简单介绍 #import "ViewController.h" @interface ViewController () @end @implementatio ...
- 【Codeforces Round #445 (Div. 2) D】Restoration of string
[链接] 我是链接,点我呀:) [题意] 给你n个字符串. 让你构造一个字符串s. 使得这n个字符串. 每个字符串都是s的子串. 且都是出现次数最多的子串. 要求s的长度最短,且s的字典序最小. [题 ...
- php实现 字符串分割
php实现 字符串分割 一.总结 一句话总结: 1.字符串按固定位分割函数是什么? 7 $str_arr=str_split($str,8); 2.字符串填补函数的参数是什么? 10 $str_arr ...
- 每天一个JavaScript实例-操作元素定位元素
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...