From 8fed4890a1d1fe28548d1fea90e139e94b11d932 Mon Sep 17 00:00:00 2001 From: LongYinan Date: Thu, 10 Dec 2020 23:22:36 +0800 Subject: [PATCH] fix(helper): accept require from caller to solve yarn2 pnp issue Close https://github.com/napi-rs/node-rs/issues/263 --- packages/bcrypt/index.js | 2 +- packages/crc32/index.js | 2 +- packages/deno-lint/index.js | 2 +- packages/helper/src/loader.ts | 16 +++++++++++----- packages/jieba/index.js | 2 +- 5 files changed, 15 insertions(+), 9 deletions(-) diff --git a/packages/bcrypt/index.js b/packages/bcrypt/index.js index 16badbb5..893b7d34 100644 --- a/packages/bcrypt/index.js +++ b/packages/bcrypt/index.js @@ -1,6 +1,6 @@ const { loadBinding } = require('@node-rs/helper') -const binding = loadBinding(__dirname, 'bcrypt', '@node-rs/bcrypt') +const binding = loadBinding(require, __dirname, 'bcrypt', '@node-rs/bcrypt') const DEFAULT_COST = 12 diff --git a/packages/crc32/index.js b/packages/crc32/index.js index 3e341eda..675f28d7 100644 --- a/packages/crc32/index.js +++ b/packages/crc32/index.js @@ -1,6 +1,6 @@ const { loadBinding } = require('@node-rs/helper') -const binding = loadBinding(__dirname, 'crc32', '@node-rs/crc32') +const binding = loadBinding(require, __dirname, 'crc32', '@node-rs/crc32') module.exports = { crc32: function crc32(input, crc = 0) { diff --git a/packages/deno-lint/index.js b/packages/deno-lint/index.js index 52b597aa..b584fef9 100644 --- a/packages/deno-lint/index.js +++ b/packages/deno-lint/index.js @@ -2,7 +2,7 @@ const { platform } = require('os') const { loadBinding } = require('@node-rs/helper') -const binding = loadBinding(__dirname, 'deno-lint', '@node-rs/deno-lint') +const binding = loadBinding(require, __dirname, 'deno-lint', '@node-rs/deno-lint') module.exports = { binding, diff --git a/packages/helper/src/loader.ts b/packages/helper/src/loader.ts index 6b2e4b21..a63db9f0 100644 --- a/packages/helper/src/loader.ts +++ b/packages/helper/src/loader.ts @@ -4,22 +4,28 @@ import { join } from 'path' import { platformArchTriples } from '@napi-rs/triples' -const ArchName = arch() -const PlatformName = platform() +/** + * @param requireFn NodeJS require function, you must pass your `require` in because `yarn pnp` need it, see https://github.com/napi-rs/node-rs/issues/263 for detail + * @param dirname The path to try to load native binding while developing in local + * @param filename napi.name field in your package.json + * @param packageName your package name, `@node-rs/helper` will try to load native package by using this name concat with `triple.platform-arch-abi` + */ +export function loadBinding(requireFn: typeof require, dirname: string, filename = 'index', packageName?: string) { + const ArchName = arch() + const PlatformName = platform() -export function loadBinding(dirname: string, filename = 'index', packageName?: string) { const triples = platformArchTriples[PlatformName][ArchName] for (const triple of triples) { // resolve in node_modules if (packageName) { try { - return require(`${packageName}-${triple.platformArchABI}`) + return requireFn(`${packageName}-${triple.platformArchABI}`) // eslint-disable-next-line no-empty } catch (e) {} } const localFilePath = join(dirname, `${filename}.${triple.platformArchABI}.node`) if (existsSync(localFilePath)) { - return require(localFilePath) + return requireFn(localFilePath) } } diff --git a/packages/jieba/index.js b/packages/jieba/index.js index 50e7eeee..97f9a813 100644 --- a/packages/jieba/index.js +++ b/packages/jieba/index.js @@ -1,6 +1,6 @@ const { loadBinding } = require('@node-rs/helper') -const native = loadBinding(__dirname, 'jieba', '@node-rs/jieba') +const native = loadBinding(require, __dirname, 'jieba', '@node-rs/jieba') module.exports = { ...native,