如何检查节点文件是否作为脚本运行?
#node #script

什么是脚本?

脚本是可以直接从终端运行的代码。

这是可运行的代码

这是一个最小的节点脚本

const run = async () => {
};

(async () => {
  try {
    await run();
  } catch (err) {
    // eslint-disable-next-line
    console.log(err);
    process.exit(1);
  }

  process.exit(0);
})();

我们如何在Woovi Monorepo上运行脚本?

我们以许多方式运行节点脚本:

节点路径/to/myScript.ts

yarn es Path/to/myScript.ts

纱W路径/to/myScript.ts

yarn esnode -r esbuild-register相同,它使用esbuild

运行节点

yarn w使用webpack

运行脚本

我们使用Esbuild和WebPack能够在MonorePo中运行任何代码,使用TypeScript。

这会导致很难检测文件是否作为脚本的入口点运行。

如何检查节点文件是否作为脚本运行?

我们将!module.parent用于节点和esbuild,但是在使用webpack时,我们在运行最终的webpack捆绑代码时注入webpack_entry。

import path from 'path';

const cwd = process.cwd();

export const isMainScript = (require, module, filename: string) => {
  // webpack_entry is the real
  if (process.env.WEBPACK_ENTRY) {
    const fullEntry = path.join(cwd, process.env.WEBPACK_ENTRY);
    const fullFilename = path.join(cwd, filename);

    if (fullEntry === fullFilename) {
      return true;
    }

    return false;
  }

  if (!module.parent) {
    return true;
  }

  // eslint-disable-next-line
  console.log('not main script, check your script code');

  return false;
};

综上所述

我们需要检测文件是否作为脚本运行,以避免在共享某些代码的情况下运行文件脚本代码。

深入兔子洞,让我们改善Woovi的运行脚本的DX


woi
Woovi是一家创业公司,使购物者能够按照自己的意愿付款。为了实现这一目标,Woovi为商人提供即时付款解决方案接受订单。

如果您想与我们合作,我们是hiring


Tianyi MaUnsplash

照片