81 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
			
		
		
	
	
			81 lines
		
	
	
		
			1.8 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`
 | ||
| // 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,
 | ||
| };
 |