首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >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

复制
相关文章
windows系统下npm全局命令无法执行解决办法
如题,一般我们刚安装的windows操作系统,前往nodejs官网下载nodejs安装包后,windows下默认没有node和npm指令。这是因为我们的windows系统还没有添加nodejs环境变量,所以找不到路径。这时候需要将nodejs的安装路径添加到环境变量的 Path 变量中。如我的路径
fastmock
2023/10/23
4.2K0
顺序执行命令,条件执行,管道
顺序执行命令,条件执行 有时候等一条指令执行,时间太久,不妨堆起来一起执行,执行完一条再下一条 每条指令用;隔开就可以啦 sudo apt-get update; sudo apt-get ins
98k
2018/04/12
1.3K0
【Npm原理】Npm 执行命令中的环境变量
今天,我们来探索,npm run 到底是怎么执行命令的,模块是否一定要全局安装呢?
神仙朱
2019/08/02
4.5K0
【Npm原理】Npm 执行命令中的环境变量
npm是如何执行scripts中命令的?
过去一直有一个疑问,为什么我在命令行运行 npm start,可以正常启动 webpack,而直接使用 craco start 不行?
lonelydawn
2022/09/07
8380
npm是如何执行scripts中命令的?
Windows 定时执行脚本[通俗易懂]
由于Windows系统,无法使用Linux下强大的crontab命令,所以该定时任务也是针对Windo系统的
全栈程序员站长
2022/09/09
1.7K0
npm并行&串行执行多个scripts命令
通过npm run 可以运行 package.json 中脚本,Npm 命令不能提供立即运行多个脚本的方式,同时运行需要打开多个终端窗口
奋飛
2021/08/30
1.6K0
npm并行&串行执行多个scripts命令
通过npm run <commander> 可以运行 package.json 中脚本,Npm 命令不能提供立即运行多个脚本的方式,同时运行需要打开多个终端窗口
奋飛
2020/05/28
6.7K0
windows开机自动执行bat脚本启动cmd命令窗口并执行命令,最后自动关闭cmd命令窗
先说bat脚本吧,随便在桌面建一个文本文档,在里面写脚本,内容是,先启动cmd命令窗,并执行一个命令,最后自动关闭cmd窗,如下:
全栈程序员站长
2022/08/05
6.6K0
windows开机自动执行bat脚本启动cmd命令窗口并执行命令,最后自动关闭cmd命令窗
mac执行vagrant命令报错
执行:vagrant box add命令 错误提示: An error occurred while downloading the remote file. The error message, if any, is reproduced below. Please fix this error and try again. 解决办法:sudo rm /opt/vagrant/embedded/bin/curl 执行:vagrant up报错 An error occurred while downloa
苦咖啡
2018/04/28
8040
sqlcmd命令执行大的SQL脚本
这两天从服务器导出一个150多MB的脚本文件,导入到我本地的SQLServer数据库中时,直接打开执行提示内存不足的错误,于是google搜索发现微软针对此类情况有不少命令行工具,其中有一款sqlcmd 实用工具,官方文档地址为:sqlcmd 实用工具 sqlcmd 实用工具是一个命令行实用工具,用于 Transact-SQL 语句和脚本的临时、交互执行以及自动执行 Transact-SQL 脚本撰写任务。 若要以交互方式使用 sqlcmd ,或要生成可使用 sqlcmd运行的脚本文件,用户需要了解 Transact-SQL。 通常以下列方式使用 sqlcmd 实用工具
ccf19881030
2020/03/02
3.6K0
java执行curl命令带json(执行shell脚本命令)
需要注意的是,命令需要以数组的形式传递参数,就是把正常的命令以空格切分成数组就行了。而且参数前后不能有空格,不然会报错。
全栈程序员站长
2022/07/31
2K0
windows命令执行上传文件的姿势
我们在做渗透测试的时候会经常遇到存在命令执行的Windows服务器,而且不能上传shell,唯一的入口就是命令执行,这种情况下,我们需要向服务器上传一个大一点的工具,如何实现,这就是本文章主要的内容。
信安之路
2018/08/08
1.8K0
windows命令执行上传文件的姿势
命令行执行Django脚本的方法
update.py import os import sys import django sys.path.append(r'C:\Users\Administrator\PycharmProjects\s6day109') os.chdir(r'C:\Users\Administrator\PycharmProjects\s6day109') os.environ.setdefault("DJANGO_SETTINGS_MODULE", "s6day109
用户1214487
2018/01/24
1.1K0
命令行执行Django脚本的方法
Windows平台使用PyInstaller将Python脚本打包成可执行文件
02 Dec 2016 Windows平台使用PyInstaller将Python脚本打包成可执行文件 平时工作中,有时候需要将自己写的Python脚本在Windows运行,但是若Windows没有安装Python,那么就不能直接运行Python脚本。本文介绍一种方法,通过PyInstaller工具将Python脚本打包成一个可执行文件,可以直接在Windows运行,不管Windows是否安装Python都可以运行该可执行文件,详细步骤如下: 1 安装Pyt
俊采
2018/05/15
1.9K0
windows批处理命令教程的书籍有哪些_windows脚本命令
批处理文件是无格式的文本文件,它包含一条或多条命令。它的文件扩展名为 .bat 或 .cmd。在命令提示下键入批处理文件的名称,或者双击该批处理文件,系统就会调用Cmd.exe按照该文件中各个命令出现的顺序来逐个运行它们。使用批处理文件(也被称为批处理程序或脚本),可以简化日常或重复性任务。当然我们的这个版本的主要内容是介绍批处理在入侵中一些实际运用,例如我们后面要提到的用批处理文件来给系统打补丁、批量植入后门程序等。下面就开始我们批处理学习之旅吧。
全栈程序员站长
2022/09/23
5.1K0
查mac对应ip的不同系统命令
一、windows 二、linux 三、ESXI
孙杰
2019/10/29
1.5K0
查mac对应ip的不同系统命令
windows命令执行防御规避总结
通过sip劫持对恶意代码签名获得系统信任https://github.com/secretsquirrel/SigThief
drunk_kk
2021/11/12
7800
在Mac下使用crontab执行定时脚本
*/10 * * * * curlhttp://localhost/test.php
新人小试
2020/03/30
3K0
在Mac下使用crontab执行定时脚本
windows系统是如何执行用户命令的?
一直以来,有一个疑问,在windows系统CMD下输入命令,如:javac,熟悉java的人都知道,这是将.java文件编译成.class文件,那么系统是如何找到可执行文件(.exe结尾)的呢?
技术人生
2020/01/20
8720
shell脚本常用命令及操作_shell脚本执行命令
「-A」 「–after-context」 显示符合范本样式的那一行之外及该行之后的内容
全栈程序员站长
2022/11/07
1.3K0

相似问题

执行脚本的Npm命令

439

从npm命令执行ssh shell脚本

14

编写脚本以自动执行npm命令

21

在Mac(终端)/Windows(命令行)中自动执行Python脚本

10

将npm描述传递给npm脚本命令

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

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

洞察 腾讯核心技术

剖析业界实践案例

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