|
|
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`
|
|
|
// we do not need for ant-design-vue
|
|
|
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 {};
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 是否存在可用的browserslist config
|
|
|
* https://github.com/browserslist/browserslist#queries
|
|
|
* @returns
|
|
|
*/
|
|
|
function isThereHaveBrowserslistConfig() {
|
|
|
try {
|
|
|
const packageJson = require(getProjectPath('package.json'));
|
|
|
if (packageJson.browserslist) {
|
|
|
return true;
|
|
|
}
|
|
|
} catch (e) {
|
|
|
//
|
|
|
}
|
|
|
if (fs.existsSync(getProjectPath('.browserslistrc'))) {
|
|
|
return true;
|
|
|
}
|
|
|
if (fs.existsSync(getProjectPath('browserslist'))) {
|
|
|
return true;
|
|
|
}
|
|
|
// parent项目的配置支持,需要再补充
|
|
|
// ROWSERSLIST ROWSERSLIST_ENV 变量的形式,需要再补充。
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
module.exports = {
|
|
|
getProjectPath,
|
|
|
resolve,
|
|
|
injectRequire,
|
|
|
getConfig,
|
|
|
isThereHaveBrowserslistConfig,
|
|
|
};
|