*Add support for node-gyp-build
This commit is contained in:
parent
8ea326514b
commit
49c07dda52
|
@ -5,12 +5,14 @@
|
|||
"dependencies": {
|
||||
"ast-matcher": "^1.1.1",
|
||||
"loady": "^0.0.5",
|
||||
"magic-string": "^0.27.0"
|
||||
"magic-string": "^0.27.0",
|
||||
"node-gyp-build": "^4.5.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/node": "^18.11.14",
|
||||
"prettier": "^2.8.1",
|
||||
"rollup": "^3.7.4",
|
||||
"typescript": "^4.9.4",
|
||||
"vite": "^4.0.1"
|
||||
}
|
||||
}
|
||||
|
|
31
src/index.ts
31
src/index.ts
|
@ -2,9 +2,12 @@ import astMatcher from "ast-matcher";
|
|||
import MagicString from "magic-string";
|
||||
// @ts-ignore
|
||||
import loady from "loady";
|
||||
// @ts-ignore
|
||||
import nodeGybBuild from "node-gyp-build";
|
||||
import fs from "fs";
|
||||
import type { PluginContext } from "rollup";
|
||||
import type { Plugin } from "vite";
|
||||
import path from "path";
|
||||
|
||||
const loaderFunction = `function loadNativeModuleTemp(module, data) {
|
||||
const tempDir = require("os").tmpdir();
|
||||
|
@ -34,10 +37,6 @@ export default function bundleNativeModulesPlugin() {
|
|||
if (!/\.(js)$/.test(id)) {
|
||||
return null;
|
||||
}
|
||||
if (!/binding/.test(src)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
const magicString = new MagicString(src);
|
||||
|
||||
const parse = (
|
||||
|
@ -99,6 +98,30 @@ export default function bundleNativeModulesPlugin() {
|
|||
}
|
||||
}
|
||||
|
||||
const findNodeBuildGyp = astMatcher("require('node-gyp-build')(__any)");
|
||||
const nodeBuildGypMatches = findNodeBuildGyp(ast);
|
||||
|
||||
if (nodeBuildGypMatches?.length) {
|
||||
for (const match of nodeBuildGypMatches) {
|
||||
if (markEdited(match.node, edits)) {
|
||||
const modulePath = nodeGybBuild.path(path.dirname(id));
|
||||
const moduleName = modulePath
|
||||
.split("node_modules")
|
||||
.pop()
|
||||
.split("/")
|
||||
.slice(1)
|
||||
.shift();
|
||||
const moduleFile = fs.readFileSync(modulePath);
|
||||
const moduleB64 = moduleFile.toString("base64");
|
||||
magicString.overwrite(
|
||||
match.node.start,
|
||||
match.node.end,
|
||||
`require('loady')('${moduleName}', loadNativeModuleTemp('${moduleName}', '${moduleB64}'))`
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (edits.length === 0) {
|
||||
return null;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue