54 lines
1.1 KiB
JavaScript
54 lines
1.1 KiB
JavaScript
const fs = require('fs');
|
|
const path = require('path');
|
|
|
|
const cwd = process.cwd();
|
|
|
|
function getProjectPath(...filePath) {
|
|
return path.join(cwd, ...filePath);
|
|
}
|
|
|
|
function resolve(moduleName) {
|
|
return require.resolve(moduleName);
|
|
}
|
|
|
|
// We need hack the require to ensure use package module first
|
|
// For example, `typescript` is required by `gulp-typescript` but provided by `antd`
|
|
let injected = false;
|
|
function injectRequire() {
|
|
if (injected) return;
|
|
|
|
const Module = require('module');
|
|
|
|
const oriRequire = Module.prototype.require;
|
|
Module.prototype.require = function(...args) {
|
|
const moduleName = args[0];
|
|
try {
|
|
return oriRequire.apply(this, args);
|
|
} catch (err) {
|
|
const newArgs = [...args];
|
|
if (moduleName[0] !== '/') {
|
|
newArgs[0] = getProjectPath('node_modules', moduleName);
|
|
}
|
|
return oriRequire.apply(this, newArgs);
|
|
}
|
|
};
|
|
|
|
injected = true;
|
|
}
|
|
|
|
function getConfig() {
|
|
const configPath = getProjectPath('.antd-tools.config.js');
|
|
if (fs.existsSync(configPath)) {
|
|
return require(configPath);
|
|
}
|
|
|
|
return {};
|
|
}
|
|
|
|
module.exports = {
|
|
getProjectPath,
|
|
resolve,
|
|
injectRequire,
|
|
getConfig,
|
|
};
|