npm指令执行前执行自定义代码

2023-11-15

1、基本逻辑

npm start执行前执行node ./bin/wb-handle

"scripts": {
    "wb": "node ./bin/wb-handle; npm start"
},

wb-handle源码,删除deleteNodeModules配置的最后一级目录文件

#!/usr/bin/env node --max-old-space-size=4096 --optimize-for-size --max_old_space_size=4096 --optimize_for_size

"use strict";

var deleteNodeModules = "abab/efg";

var fs = require("fs");

function deleteFolderRecursive(path) {
    if( fs.existsSync(path) ) {
        fs.readdirSync(path).forEach(function(file) {
            var curPath = path + "/" + file;
            if(fs.statSync(curPath).isDirectory()) { // recurse
                deleteFolderRecursive(curPath);
            } else { // delete file
                fs.unlinkSync(curPath);
            }
        });
        fs.rmdirSync(path);
    }
};

deleteFolderRecursive(`./node_modules/${deleteNodeModules}`)


2、推包到npm

接下来我们代码推包到npm使用

{
  "name": "wb-handle",
  "version": "1.0.2",
  "description": "delete mode_modules file",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "bin": {
    "wbhandle": "./bin/wb-handle.js"
  },
  "keywords": [
    "node"
  ],
  "author": "wangb",
  "license": "ISC"
}

wb-handle.js改进代码,可以在项目package.json配置deleteModule自动删除nodel_modules中的包

#!/usr/bin/env node --max-old-space-size=4096 --optimize-for-size --max_old_space_size=4096 --optimize_for_size

"use strict";


const path = require('path');
var fs = require("fs");


const appDirectory = fs.realpathSync(process.cwd());
const resolveApp = relativePath => path.resolve(appDirectory, relativePath);
var packagePath = resolveApp("package.json")
var packageJson = require(packagePath);
var deleteModule = packageJson && packageJson.deleteModule;
if (!deleteModule) {
    console.log("请在package.json中输入deleteModule");
    return;
} 
function deleteFolderRecursive(path) {
    if( fs.existsSync(path) ) {
        fs.readdirSync(path).forEach(function(file) {
            var curPath = path + "/" + file;
            if(fs.statSync(curPath).isDirectory()) { // recurse
                deleteFolderRecursive(curPath);
            } else { // delete file
                fs.unlinkSync(curPath);
            }
        });
        fs.rmdirSync
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

npm指令执行前执行自定义代码 的相关文章

  • 在 NextJS 上运行开发服务器(在网络上)

    在使用 ReactJS 时 当我们使用命令 npm start 时 它会在 localhost 3000 以及网络 192 168 1 2 3000 上启动开发服务器 这非常简单 我可以通过进入该地址在所有设备上测试我的应用程序 最近我开始
  • Javascript - 模板字符串不能漂亮地打印对象

    我可以使用 ES6 模板字符串来漂亮地打印 javascript 对象吗 这是来自 React Native 项目 其中console log 输出到 Chrome 调试工具 我想要的是 const description App open
  • D3.js分组条形图

    I am making a bar chart using D3 js like this source statcan gc ca http www statcan gc ca pub 12 593 x 2007001 figures f
  • 无法实现模块模式

    我正在尝试重现 Douglas Crockford 所著的 Javascript The Good Parts 一书中的一些代码 这个想法是使用闭包进行对象封装并避免Javascript固有的全局变量 var serial maker fu
  • 在网页上写乐谱[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我希望能够在网页中编写乐谱和和弦 有没有可用的库 例如用于数学的 Mathjax 如果没有 那么还有其
  • 如何使用 LeafLe 创建商店地图

    我希望创建一个可以交互的地图 我发现的最好的选择是传单 问题是我没有找到任何资源来解释如何创建自己的地图 我希望创建一个商场地图 用户可以在其中看到所有商店 喷泉 我怎样才能做到这一点 最好的起点是传单示例页面 http leafletjs
  • 如何在 Javascript 中获取时区名称(PDT、EST 等)? [复制]

    这个问题在这里已经有答案了 使用 Javascript 有没有办法根据用户的设备获取用户的时区名称 PDT EST 等 我尝试过的代码 const timezone jstz determine const userTimezone tim
  • 为什么 foo.hasOwnProperty('__proto__') 等于 false?

    var foo bar 5 Why is foo hasOwnProperty proto 等于false 它不能来自原型链中更高层的任何对象 因为它是特定于这个对象的 EDIT 有些答案说它已开启Object prototype 但我不明
  • Android 上的 Chrome 强制隐藏地址栏

    我最近开发了一个获取混合 http https 内容的网站 因此 我总是将地址栏显示在顶部 它不会像其他网站那样自动隐藏 这就是我要说的 This https planetkde org 是网站的链接 内容是从各种来源获取的 因此无法过滤非
  • 定时器内嵌套异步等待 - 不返回所需的值

    我必须使用 Mocha 和 chai 测试来测试端点的响应 下面是相同的代码 async function getData userId let response let interval setInterval async gt resp
  • History.pushState和页面刷新

    我开始研究 HTML5 新历史 API 不过 我有一个问题 如何处理页面刷新 例如 用户单击一个链接 该链接由 js 函数处理 该函数 异步加载页面内容 使用history pushState 更改URL 用户刷新页面 但是服务器上当然不存
  • WaveSurfer JS 无法在 Firefox 中为特定的 mp3 音频文件生成图表

    我们面临着在 Firefox 中使用 wavesurfer JS 对某些特定格式的 mp3 文件绘制音频可视化 图表 的问题 它总是给我们这样的错误 传递给decodeAudioData 的缓冲区包含未知的内容类型 但同一个文件在 chro
  • 使用 ES6 静态函数时,我得到“没有这样的方法”

    我正在尝试为我在 React Native 中工作的项目创建一个包含静态函数的 utils 类 我读到了如何在 StackOverFlow 中创建静态函数question https stackoverflow com questions
  • Javascript:打乱数组中的对象组

    我有一个对象数组 我已按键排序 group如下 使得所有具有相同值的对象group在索引中彼此相邻data 例如 var data foo cat group house foo cat group house foo cat group
  • 当 Django 管理弹出窗口(绿色加号图标)完成时,是否有事件或其他方式调用 Javascript 函数?

    假设我们有这些 Django 模型 class Band models Model name models CharField max length 256 default Eagles of Death Metal class Song
  • 检测 iPad Safari 用户的最佳方法

    添加用于检测 iPad Safari 用户的代码的最佳方法是什么 我的意思是我们应该使用 1 CSS 通过链接媒体 2 JS 通过navigator对象 我听说使用用户代理字符串并不是检测 iPad 的最佳方法 因为存在不一致的情况 请建议
  • 如何在 AWS Amplify 上运行 React/Redux 应用程序的代理

    我最近实施了Proxy 在 Express js 中 对于我的反应应用程序发出请求时隐藏 API URL 当我在本地主机上运行代理和应用程序时 它工作得非常好 现在我已准备好将我的应用程序部署到AWS 放大 我对如何让我的代理在那里运行有点
  • 主干集合排序

    我制作了我的第一个主干应用程序 但在集合排序方面遇到了一些问题 使用这个后 var SortedFriends MyFriends sortBy function friend return friend get uid console l
  • 如何缩放到高图中的特定点

    Highmaps highcharts 是一个 javascript jquery 适配器 可在浏览器等中呈现地图 我有一张突出显示单个国家 地区的地图 但是 世界 地图的比例如此之大 因此我想在将地图加载到相关国家 地区后进行放大 看看
  • 在javascript中我们如何识别一个对象是Hash还是Array?

    我的 JSON 调用的输出可以是数组或哈希 我如何区分这两者 现代浏览器支持Array isArray obj method See MDN https developer mozilla org en US docs Web JavaSc

随机推荐

  • java 多线程学习笔记之 线程同步

    在前面我们将了很多关于同步的问题 然而在现实中 需要线程之间的协作 比如说最经典的生产者 消费者模型 当队列满时 生产者需要等待队列有空间才能继续往里面放入商品 而在等待的期间内 生产者必须释放对临界资源 即队列 的占用权 因为生产者如果不
  • 携程连接服务器失败显示0048,携程网回应:携程服务器出故障期间可访问艺龙旅行网...

    2015年5月28日 携程服务器出故障后 官方回应 这期间消费者可访问艺龙旅行网 28日 很多人的朋友圈被一则携程服务瘫痪的消息刷屏 震惊了业界和消费者 记者28日登录携程系统发现 携程官方网站今日突然陷入瘫痪 打开主页后点击时均显示 Se
  • [VS Code]跟我一起在Visual Studio Code 添加自定义snippet(代码段),附详细配置

    Add code snippets for CLANG in VS Code 日志 2021 12 16 VSCode 自 v1 40 起 引入新的变量 WORKSPACE FOLDER RANDOM 和 RANDOM HEX 自 v1 4
  • PostgreSQL 用户和角色管理

    PostgreSQL的用户管理 用户和角色的区别 用户有权限 角色没有权限 一 组角色管理 使用组角色的概念管理数据库访问权限 1 创建组角色 一个组角色可以看做是一组数据用户 组角色可以拥有数据库对象 比如表 以及可以把这些对象上的权限赋
  • DDR SDRAM的内部结构Cell Structure(预充电+刷新)

    文章目录 读过程 包含预充电步骤 写过程 写0 写1 DDR为什么要刷新 以上图Cell0为例子 读过程 包含预充电步骤 首先关闭所有字线 W0 W1 Wn 让所有FET均不导通 然后将位线B0通过预充电开关Precharge 图中未画出
  • 面试官:HBase 有哪些优化点?

    这是个相对开放的问题 问题没有那么得细 面对这种问题千万不要乱了阵脚 其实这种问题答得好是很加分的 可以从几个不同的方向来回答 这样显得有条理 而且可以向面试官展现你的多维度思考和总结的能力 两个角度 一个从使用者的角度 一个从维护者的角度
  • CopyFile()的使用方法

    1 设置工程默认的Unicode字符集为Not Set 编写代码如下 函数CopyFile source destination false 表示 如果目标文件夹已经有相同的文件 则该文件会被替换 函数CopyFile source des
  • 什么是weak symbol?

    weak symbol 我们用nm看动态库时 会发现有些符号类型是 V 手册里解释如下 V The symbol is a weak object When a weak defined symbol is linked with a no
  • 【报告分享】2021年元宇宙发展报告-数据观(附下载)

    摘要 2021年被公认为是 元宇宙元年 这距被称为 虚拟现实元年 的2016年已过去5年之久 业界将元宇宙视为新增长点和下一个具有战略意义的竞争领域 将引发全球科技产业的新一轮洗牌 学术界和产业界普遍认为 元宇宙本身不是一种技术 而是整合多
  • 正则表达式中.*的作用

    今天看正则表达式的书籍是看到这么个例子 要求匹配 文章中的xml 匹配使用的正则表达式为 lt xml gt 一开始没有理解 是做什么用处的 百度了一番后明白了 原来 中 代表任意单个字符 包括空格 代表前面任意单个字符的重复次数 因此 l
  • mysql 获取当前时间戳

    ysql 获取当前时间为select now 运行结果2012 09 05 17 24 15 mysql 获取当前时间戳为select unix timestamp now 运行结果 unix timestamp now 134683698
  • ERROR 1819 (HY000): Your password does not satisfy the current policy requirements

    关于这个问题是在 基于MySQL Yum存储库在Linux 7 2上安装MySQL 5 7 21数据库服务 实战篇 时遇到的问题 这是 mysql 初始化时 使用临时密码 修改自定义密码时 由于自定义密码比较简单 就出现了不符合密码策略的问
  • maven工程下 读取resource下配置文件

    在maven工程中 我们会将配置文件放到 src main resources 下面 例如 我们需要确认resource 下的文件 编译之后存放的位置 它编译的路径直接位于classes下面 这个路径其实就是classPath的路径 所以
  • 【C语言基础】学生成绩管理系统(方法:数组)

    涉及 字符型数组 代码 include
  • 两款免费、好用的数据库连接工具

    一 Navicate Navicat是一套快速 可靠的数据库管理工具 专为简化数据库的管理及降低系统管理成本而设 它的设计符合数据库管理员 开发人员及中小企业的需要 Navicat 是以直觉化的图形用户界面而建的 让你可以以安全并且简单的方
  • 《5分钟说完一个概念》:什么是Bootstrap采用

    想知道中国人的平均身高 群体均值 群体方差为 每次抽样 1000 人 抽样了 次 每次抽样的 1000人 的平均身高是一次随机抽样 这
  • 网络带宽和吞吐量

    转载网络带宽和吞吐量
  • crmeb 多商户小程序配置

    一 小程序下载并提交审核 下载微信小程序代码 位置 平台后台 gt 应用 gt 小程序 1 首先需要填写这里的小程序信息 然后在这里就可以下载 如果未开启直播要选择 否则会无法使用 2 下载编译后的小程序代码 没有配置小程序的需要先配置小程
  • 计算机视觉实验:直方图均衡化、Hough变化应用

    实验结果
  • npm指令执行前执行自定义代码

    1 基本逻辑 npm start执行前执行node bin wb handle scripts wb node bin wb handle npm start wb handle源码 删除deleteNodeModules配置的最后一级目录