Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >NPM条件脚本(Windows / Mac)将执行不同的命令

NPM条件脚本(Windows / Mac)将执行不同的命令
EN

Stack Overflow用户
提问于 2018-04-26 23:23:01
回答 2查看 2K关注 0票数 4

用例:

我正在NPM中设置一个prepublishOnly钩子,它删除" lib“文件夹,然后将类型记录源文件转到一个新的lib文件夹中,然后运行测试。

问题:

应该有两个人发布NPM包,它们都在不同的操作系统(Windows / Mac)上工作。因此,删除文件夹的命令是不同的。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  "scripts": {
    "build": "tsc",
    "clean": "rm -rf lib",
    "clean:windows": "if exist lib rmdir /s /q lib",
    "lint": "tslint --project tsconfig.json --format stylish src/**/*.ts",
    "format": "prettier --write \"**/*.ts\""
  },
  "husky": {
    "hooks": {
      "pre-push": "npm run clean:windows && npm run build && npm run test"
    }
  },

问题:

是否有一种有条件地运行NPM脚本的方法(基于使用的操作系统),或者是否有一个在这些操作系统上工作的remove文件夹命令?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-04-27 03:47:28

如果您只想通过跨平台方式通过npm脚本删除文件夹,那么将gulp添加到工具列表中似乎是没有必要的。对于轻量级解决方案,请考虑以下两种解决方案:

解决方案1

看看里姆拉夫,它被描述为:

UNIX命令rm -rf用于节点。

使用

  1. cd到您的项目目录并运行以下命令: npm安装rimraf -save-dev
  2. clean脚本在package.json中更改为: “脚本”:{“干净”:"rimraf lib",. }
  3. 从您的clean:windows中删除package.json脚本,因为这是多余的。

Note我在将它作为本地依赖项安装时并没有取得很大的成功,因此我使用了下面的解决方案2。然而,你可能会有更大的成功,所以值得一试。

解决方案2

下面的解决方案使用了shelljs rm命令,它类似于Unix rm -rf命令,但它是用于节点的-因此它是一个跨平台的等价物。

以下步骤说明了如何实现这一目标:

  1. cd到您的项目目录,并通过运行以下命令安装贝壳类: npm安装shelljs --保存-dev
  2. 创建一个自定义节点脚本如下,让我们将文件命名为clean.js: Process.argv.slice(2).forEach(函数(_path){ shell.rm('-rf',_path);}) 并将其保存到项目根目录中名为.scripts的隐藏目录中。例如: 。采购产品名称:.scripts clean.js│└──└──├──lib│.scripts└──...├──└──...├──node_modules│src└──...├──└──...├──├──src│src└──...└──.
  3. clean脚本在package.json中替换为: “脚本”:{“干净”:“节点.脚本/清洁库”, 您还可以向clean.js传递多个路径参数。例如: “脚本”:{“干净”:“节点.脚本/清洁库另一个/文件夹/路径foo/bar", 文件也会被处理。例如: “脚本”:{“干净”:“节点.脚本/清洁路径/to/quux.js”,. },
  4. 从您的clean:windows中删除package.json脚本,因为这是多余的。

Notes

  1. clean.js利用节点内置的process.argv来获得调用脚本时传递给Node的命令行参数数组。
  2. 然后,我们将索引切片()中的参数数组设置为2,以确保只包含文件夹/文件路径参数(例如lib)。
  3. 最后,我们使用forEach()循环遍历数组中的每个文件夹路径,并在循环的每一轮调用shell.rm('-rf', _path);来删除资产。

编辑/更新:

另一种跨平台解决方案(最初发布此答案时不可用)是利用沙克斯包,它被描述为:

shx是围绕ShellJS Unix命令的包装器,它为npm包脚本中简单的类Unix跨平台命令提供了一个简单的解决方案。

  1. 运行以下命令来安装shx: npm i -D shx
  2. 然后将clean脚本重新定义为package.json,如下所示: “脚本”:{“干净”:"shx -rf lib“}
票数 5
EN

Stack Overflow用户

发布于 2018-04-26 23:35:57

我解决这种问题的方法是使用gulp来定义一组OS特定的任务,因为您编写的代码与操作系统无关。

您需要将gulp作为依赖项来安装,并在根目录中创建一个gulpfile.js。在其中,定义要删除文件夹的任务。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var gulp = require('gulp'),
    path = require('path'),
    fs = require('fs-extra');

const rootFolder = path.join(__dirname);
const libFolder = path.join(rootFolder, 'lib');

gulp.task('clean:lib', function () {
  return deleteFolder(libFolder);
});

function deleteFolder(folder) {
  return fs.removeSync(folder);
}

gulp.task('deleteLib', ['clean:lib']);

然后,在您的package.json脚本中,您可以执行&& gulp deleteLib。(确保您的dev文件中使用的包是作为开发依赖项安装在package.json中的!)

代码是未经测试和写在我的顶部,但它只是给你一个大致的想法。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50057368

复制
相关文章
模拟按钮的可访问性
为了创建更加漂亮的按钮,我们在项目实践中经常使用A、SPAN等元素模拟按钮,而不是使用更合语义的input[button]或者button元素。使用这种方法我们可以快速的创建各浏览器表现一致的按钮,免受各种bug困扰,但同时也带来了可访问性问题。
Jace
2018/08/01
8870
WAI-ARIA 可访问性尝试
WAI-ARIA 的全称是 Web Accessibility Initiative – the Accessible Rich Internet Applications Suite。简而言之:我们使用这个标准定义的一些方式,来实现无障碍化,目的是为了让那些残障人士也可以顺利的访问我们的站点。
上山打老虎了
2022/06/15
4350
WAI-ARIA 可访问性尝试
如何提高网站的可访问性?
关于可访问性的错误观念 可访问性影响所有用户,而不仅仅是那些有特定障碍的用户。接受这一点意味着实现可访问性就是建立压力案例。压力案例指的是影响任何一个人的任何医疗或任何情境状况,无论是什么场景时间点。一些常见的压力案例原因是:
lyb-geek
2018/12/11
1.5K0
关于 Web 可访问性的神话
网络可访问性是每个 Web 开发项目中的必去之处,但对于许多 Web 开发人员来说,它似乎仍是个谜。就像这是传奇的东西, 而不是工作所需的基本技能。
OwenZhang
2021/12/08
6680
关于 Web 可访问性的神话
可访问性测试(无障碍测试)
网络是向所有人开放的,作为一个测试者(也是人),我们有责任检查它是否对所有用户开放。反过来,这将为业务的成功做出很大贡献,因为我们努力让每个用户都能访问应用程序。
FunTester
2023/08/04
7800
可访问性测试(无障碍测试)
10步大幅提升网站可访问性
10步大幅提升网站可访问性:1. 检查<title>标签;2. 提供文字替代方案;3. 检查表单;4. 使用heading做信息架构;5. 减少焦点劫持;6. 按Ctrl+或command+查看页面缩放;7. 添加landmark角色;8. 设置快捷键;9. 触发界面转换需设置焦点;10. 填写一个简单的链接到<body>之后作为第一个内容元素。
RP道貌不岸然
2017/11/22
1K0
10步大幅提升网站可访问性
运营数据库系列之可访问性
这篇博客文章是CDP中Cloudera的运营数据库(OpDB)系列文章的一部分。每篇文章都会详细介绍新功能。从该系列的开头开始,请参阅CDP 中的 Operational Database 。
大数据杂货铺
2020/04/21
8730
运营数据库系列之可访问性
提升网站可访问性的CSS实践方法
随着互联网的不断发展,越来越多的人开始依赖于网络,如何让网站更加易于访问、易于阅读是一个至关重要的问题。本文将从多个方面介绍如何使用CSS来提升网站的可访问性。
很酷的站长
2023/10/07
2460
提升网站可访问性的CSS实践方法
.Net6种成员的可访问性
CLR术语 C#术语 描述 Private private 成员只能由定义类型或任何嵌套类型访问 Family protected 成员只能由定义类型,任何嵌套类型或者不管在任何程序集中声明的派生类型访问 Family  and  Assembly 不支持 成员只能由定义类型,任何嵌套类型或者同一程序集中定义的派生类型访问 Assembly internal 成员只能由定义程序集访问 Family or Assembly protected  internal 成员可由定义类型,任何嵌套类型,任何派生类或者
莫问今朝
2018/08/31
5920
10条提高网站可访问性的建议
我们收集了10条提高网站可访问性的建议以保证网站你的网站对任何人都是友好的,包括残疾人。
frontoldman
2019/09/02
1K0
10条提高网站可访问性的建议
如何测试你做的项目的可访问性
编者按:本文作者:安佳,360 搜索事业部的前端开发工程师,W3C CSS 工作组成员。
苏南
2020/12/16
1.9K0
如何测试你做的项目的可访问性
C#2.0新增功能07 getter/setter 单独可访问性
  属性是一种成员,它提供灵活的机制来读取、写入或计算私有字段的值。 属性可用作公共数据成员,但它们实际上是称为访问器的特殊方法。 这使得可以轻松访问数据,还有助于提高方法的安全性和灵活性。
张传宁IT讲堂
2019/09/17
4110
使用 CSS prefers-* 规范,提升网站的可访问性与健壮性
互联网发展到今天,对于我们的前端而言,我们的关注点不应该仅仅是我们产出的页面能不能用,也需要更多的去关注我们的页面好不好用,有没有照顾到更多的用户群体?
Sb_Coco
2021/06/08
6690
使用 CSS prefers-* 规范,提升网站的可访问性与健壮性
如何提高 Web 可访问性,让残障人士拥有更好的体验?
如果你创建了 Web 内容,那么即使从未写过一行代码或登录 CMS,你也可以在可访问性方面发挥作用。
深度学习与Python
2022/11/28
7250
如何提高 Web 可访问性,让残障人士拥有更好的体验?
A11Y(Accessibility 可访问性)的研发投入到底值不值?| GMTC
Accessibility 是指可访问性,很多时候也被人称为无障碍,之前有人一度认为,只要让盲人人士可以正常访问(操作)Web 应用或 Web 网站,那么该应用就具备可访问性,也意味着无障碍设计做得好。但这个认知并不准确,我们通常所说的可访问性,更侧重于对用户的“方便性”的考量,即让尽可能多的人使用你的网站。 Tim Berners-Lee(万维网的发明者和 W3C 主管)曾说过:“Web 的力量在于它的普遍性,每个人不论残疾与否都能访问是一个最基本的方面”。W3C 则将“无障碍(Accessibilit
深度学习与Python
2023/04/01
5390
A11Y(Accessibility 可访问性)的研发投入到底值不值?| GMTC
[译] 世界比以往任何时候都更需要 Web 可访问性
原文地址:https://levelup.gitconnected.com/the-world-needs-web-accessibility-now-more-than-ever-df8dc4aab2b6 原文作者:KBronJohn 译文出自:"掘金翻译计划"(https://github.com/xitu/gold-miner) 本文永久链接:https://github.com/xitu/gold-miner/blob/master/article/2020/the-world-needs-web
江米小枣
2020/09/16
3690
监视器
想了解 synchronized 是如何运行的?就要先搞清楚 synchronized 是如何实现? synchronized 同步锁是通过 JVM 内置的 Monitor 监视器实现的,而监视器又是依赖操作系统的互斥锁 Mutex 实现的,那接下来我们先来了解一下监视器。
磊哥
2022/05/10
8600
监视器
可测性设计DFT
穷举测试向量, 就需要214=16384个测试矢量,对于一个有38个输入端口的16位的ALU来说,以10 MHz的速度运行完所有的测试矢量需要7.64个小时.
数字芯片社区
2022/12/18
1.3K0
可测性设计DFT
Google Fonts 已可正常访问,相关插件可卸
大概9 个月前Google Fonts 所在的googleapis.com 被墙,导致WordPress 后台访问慢(详细点这)。最新的情况是,谷歌官方为Google Fonts在国内解析了个国内ip,因此Google Fonts 在国内已可正常访问,相关插件可以卸掉了。 详情 各位可以ping 下fonts.googleapis.com,在国内解析出:googleadapis-china.1.google.com,对应的203.208.48.136是来自北京市海淀区北京谷翔信息技术有限公司的IP地址——即
Jeff
2018/01/19
2.3K0
Google Fonts 已可正常访问,相关插件可卸
设置 jupyter notebook 可远程访问
默认情况下,安装好 Anaconda 后打开 jupyter notebook, 访问本地 localhost:8888 即可。但是如果要访问另一台机器,比如远端服务器上的 notebook, 即默认是不支持 172.104.105.119:8888 这样的访问,需要额外配置。
用户1558438
2018/08/23
2.3K0

相似问题

如何在cPanel中托管Laravel和Inertiajs (React)应用程序?

14

在单域cpanel中托管多个react应用程序

13

如何在cPanel上托管node react web应用程序?

19

Drupal AEgir托管系统和cPanel

11

NodeJS cPanel托管

13
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文