node - 本地二进制包装器,无缝的用作本地依赖

Posted 咕咕gu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了node - 本地二进制包装器,无缝的用作本地依赖相关的知识,希望对你有一定的参考价值。

本地二进制文件包装器

主要是为了解决,不同环境下需要使用不同的本地二进制文件。

为什么不根据当前环境在线下载呢?

因为网络下载会有墙和编译的等不可抗力问题。所以自行下载好放起来,再通过包装器使用.

const path = require(\'path\');
const fs = require(\'fs-extra\');

class Local_Bin_Wrapper {
  constructor(){
    this.map = new Map();
  }
  /**
   * 配置包路径
   * @param url 本地二进制包的绝对路径
   * @param platfrom 包的平台 darwin -> macOs win32-> windows
   * @returns this
   */
  src(url: string, platfrom: "darwin" | "win32"): this {
    this.map.set(platfrom, path.resolve(url));
    return this;
  }
  //返回符合当前平台的二进制地址
  path(): string {
    return this.map.get(process.platform);
  }
  
  //仅仅提供一个调用方法
  async run(cmd = ["--version"]): Promise<execa.ExecaChildProcess<string>> {
    const path = this.path();
    try {
      //验证是否存在
      //如果不存在就会报错 try catch捕获
      fs.statSync(path);

      const result_1 = await execa(path, cmd);
      console.log("command:", result_1.command);
      if (result_1.stderr.length > 0) {
        console.log(result_1.stderr);
      }
      if (result_1.stdout.length > 0) {
        console.log(result_1.stdout);
      }
      return result_1;
    } catch (e) {
      console.log(`Failed to access file ${path}`, e);
      return Promise.reject(e);
    }
  }
}

调用例子

import * as execa from "execa";

const url = path.resolve(__dirname,\'../bin\');
const bin = new Local_Bin_Wrapper()
    .src(`${url}/mac/pngquant/pngquant`, \'darwin\')
    .src(`${url}/win/pngquant/pngquant.exe`, \'win32\');

//这样便于自己封装
const pngquantBin = bin.path();
execa(pngquantBin, [\'--version\']);

以上是关于node - 本地二进制包装器,无缝的用作本地依赖的主要内容,如果未能解决你的问题,请参考以下文章

本地搜索运算符 Python 包装器 Google or-tools

tesseract-php 包装器在本地主机上运行时出现路径错误

如何强制 IntelliJ 中的 Maven 从本地 .m2 存储库中提取特定依赖项

Node.js CLI 到网页包装器

node本地项目发生依赖包因更新而不兼容导致项目启动错误解决记录

Autodesk forge 查看器 js 依赖项存储在本地项目中