npm脚本库在项目中的应用是怎样的
Admin 2022-08-12 群英技术资讯 1184 次浏览
关于“npm脚本库在项目中的应用是怎样的”的知识有一些人不是很理解,对此小编给大家总结了相关内容,具有一定的参考借鉴价值,而且易于学习与理解,希望能对大家有所帮助,有这个方面学习需要的朋友就继续往下看吧。脚本是 项目真正的入口 。
无论你是刚刚 clone 完公司的项目,抑或是你准备在开源社区做一点微小的贡献;你需要做的第一件事,永远是:
打开 package.json,看看 scripts 里都有哪些脚本。
build、bundle、build:doc;dev、serve、start;test;当你执行 npm run serve 或者 npm run dev 时,你可以开始开发调试,推进项目的进度。
但使用脚本的过程中,也有不便之处。
是什么?往下看。
王咸鱼是一家小公司的前端骨干,经常负责前端项目重构、架构调整、打包优化等方面的工作。
但他经常遇到这样的问题:
如果我要先运行 build:umd、再运行 build:esm、再运行 build:docs,应该怎么做?
就像这样:

想了想,他觉得自己可以了,于是写了如下代码:
npm run build:umd && npm run build:esm && npm run build:docs
不过项目组的小伙伴很快就提出了质疑:
"build:umd 和 build:esm 没有前置依赖关系啊,应该可以同时构建,这样能提升构建效率。"
王咸鱼一听,觉得很有道理。
构建过程就变成了这样:

这下让王咸鱼为难了,居然没想到快捷的办法,只能引入了 gulp ,并写了一些额外的 js 脚本才解决这个问题。
那么,有更好的办法吗?
这天晚上,王咸鱼加班到深夜,一位正在巡逻的发际线奇高的保安大哥,偶然扫了一眼他的屏幕,用低沉的声音告诉他:
"傻小子,用 npm-run-all 啊!"
新世界的大门从此打开。
上面那个让王咸鱼抓耳挠腮的问题,瞬间被解决了!
他只写了一行代码:
{
"scripts": {
"build": "npm-run-all -p build:esm build:umd -s build:docs"
}
}
以上脚本执行后会有什么效果呢?
build:umd 和 build:esm 首先会异步同时执行;build:docs“完美!”
王咸鱼伸了个懒腰,终于可以下班了。
但是第二天,又有组员提出了疑问:“这仨完全可以同时运行啊!”
王咸鱼听了,觉得很有道理,用了三秒钟就实现了效果,仅仅删了几个代码:
{
"scripts": {
"build": "npm-run-all -p build:esm build:umd build:docs"
}
}
sooooooo!easy!
npm-run-all 是什么?
官方如此自我介绍:
一个 CLI 工具,可以并行、或者按顺序执行多个 npm 脚本。
对,它可以轻松地组织 “npm 脚本” 的执行顺序。
npmjs: www.npmjs.com/package/npm…
github: github.com/mysticatea/…
yarn add -D npm-run-all # or npm install -D npm-run-all
通过 npm-run-all 这个命令,你可以随意组织脚本。它有很多选项,其中最关键的是这两个:
npm-run-all -s a b -p c d
没错,就是 -s 和 -p;
s,便是 serial,指 “串行”。p,便是 parallel,指 “并行”。通过不断组合以上两个选项,可以定义出多种执行顺序,比如:
npm-run-all a b --parallel c d --serial e f --parallel g h i
a 和 bc 和 de 和 fg、h、inpm-s 可以理解为 npm-run-all --serial的简写。
npm-s a b c
先效果是:串行执行 a,b,c;
npm-pnpm-p 可以理解为 npm-run-all --parallel的简写。
npm-p a b c
先效果是:并行执行 a,b,c;
先假设,如果同时存在 build:umd、build:esm、build:docs,你想让它们三个并行执行。
你可能会写这样的代码:
{
"scripts": {
"build": "npm-p build:umd build:esm build:docs"
}
}
但是呢,就很长,很难看,有没有更好的办法?
有,用通配符:
{
"scripts": {
"build": "run-p \"build:*\""
}
}
舒服!这样就行了,完美!
除了上面介绍的顺序编排外,npm-run-all 还提供了很多实用选项:
--max-parallel 最大并发数限制。比如你有20个构建物要打包,但 CPU 能力有限,你希望同一时间最多有三个在构建,就可以用它;--continue-on-error 顾名思义,出错了继续执行;--race 参考 Promise.race....
这也是它相比于直接写 shell 最大的优势所在;
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
今天给大家分享一个比较有趣的实例,相信很多朋友都有抢过微信红包吧,有的人红包抢到的金额的多,有的人抢到的少,那么大家是否有好奇这是怎样实现的,下面小编就给大家介绍一下用JavaScript实现指定红包金额的算法,感兴趣的朋友就继续往下看吧。
JavaScript的保留字是什么意思,有哪些?javascript的保留字有:abstract、double、goto、native、static等等,很多新手不清楚JavaScript的保留字是什么,对此本文就给大家来简单的介绍一下,大家在使用JavaScript时,对于JavaScript的保留字要注意。
这篇文章主要为大家详细介绍了Vue实现记事本功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
我们知道JS中有很多操作数组的方便方法,因此这篇文章就主要给大家分享JS对象数组的简单增删改操作,下文有实例供大家参考,感兴趣的朋友就继续往下看吧。
本篇文章整理总结了一些基于jQuery的前端面试来分享给大家,里面jQuery的常见面试问题,以及移动端常见问题,希望对大家有所帮助!
成为群英会员,开启智能安全云计算之旅
立即注册关注或联系群英网络
7x24小时售前:400-678-4567
7x24小时售后:0668-2555666
24小时QQ客服
群英微信公众号
CNNIC域名投诉举报处理平台
服务电话:010-58813000
服务邮箱:service@cnnic.cn
投诉与建议:0668-2555555
Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 ICP核准(ICP备案)粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008