UNPKG

dongzeping-cli-test

Version:

A sample npm package that runs automatically when installed

163 lines (131 loc) 4.19 kB
/** * cli-test - A npm package that copies docs to config * @version 1.0.0 */ const fs = require('fs'); const path = require('path'); /** * 获取项目根目录(安装了这个包的项目根目录) */ function getProjectRoot() { let currentDir = process.cwd(); console.log(`🔍 Debug: process.cwd() = ${currentDir}`); console.log(`🔍 Debug: __dirname = ${__dirname}`); // 如果在node_modules中运行,找到项目根目录 if (currentDir.includes('node_modules')) { console.log(`🔍 Debug: Found 'node_modules' in path, extracting project root...`); const nodeModulesIndex = currentDir.indexOf('node_modules'); if (nodeModulesIndex !== -1) { currentDir = currentDir.substring(0, nodeModulesIndex); console.log(`🔍 Debug: Project root extracted = ${currentDir}`); } } else { console.log(`🔍 Debug: No 'node_modules' in path, using current directory`); } return currentDir; } /** * 获取包目录(当前包的位置) */ function getPackageRoot() { return __dirname; } /** * 递归拷贝目录 */ function copyDirectory(srcDir, destDir) { if (!fs.existsSync(srcDir)) { console.log(`❌ Source directory not found: ${srcDir}`); return false; } // 创建目标目录 if (!fs.existsSync(destDir)) { fs.mkdirSync(destDir, { recursive: true }); } const items = fs.readdirSync(srcDir); items.forEach(item => { const srcPath = path.join(srcDir, item); const destPath = path.join(destDir, item); const stat = fs.statSync(srcPath); if (stat.isDirectory()) { copyDirectory(srcPath, destPath); } else { fs.copyFileSync(srcPath, destPath); console.log(`✅ Copied: ${item}`); } }); return true; } /** * 核心功能:将包内docs拷贝到项目config目录 */ function copyDocsToConfig() { const packageRoot = getPackageRoot(); const projectRoot = getProjectRoot(); const docsDir = path.join(packageRoot, 'docs'); const configDir = path.join(projectRoot, 'config'); console.log('\n📋 Copying configuration files...'); console.log(`📦 Package Root: ${packageRoot}`); console.log(`🏠 Project Root: ${projectRoot}`); console.log(`📂 Source: ${docsDir}`); console.log(`🎯 Target: ${configDir}\n`); const success = copyDirectory(docsDir, configDir); if (success) { console.log('\n🎉 Configuration files copied successfully!'); } else { console.log('\n❌ Failed to copy configuration files.'); } return success; } /** * 修改项目package.json,添加dzp脚本 */ function addScriptToPackageJson() { const projectRoot = getProjectRoot(); const packageJsonPath = path.join(projectRoot, 'package.json'); console.log('\n📝 Updating package.json scripts...'); console.log(`📄 Target package.json: ${packageJsonPath}`); // 检查package.json是否存在 if (!fs.existsSync(packageJsonPath)) { console.log('❌ package.json not found in project root'); return false; } try { // 读取package.json const packageJsonContent = fs.readFileSync(packageJsonPath, 'utf8'); const packageJson = JSON.parse(packageJsonContent); // 确保scripts对象存在 if (!packageJson.scripts) { packageJson.scripts = {}; } // 添加dzp脚本(如果不存在) if (!packageJson.scripts.dzp) { packageJson.scripts.dzp = 'node dzp.js'; // 写回文件,保持格式 fs.writeFileSync(packageJsonPath, JSON.stringify(packageJson, null, 2) + '\n'); console.log('✅ Added "dzp": "node dzp.js" to scripts'); return true; } else { console.log('⚠️ "dzp" script already exists, skipping...'); return false; } } catch (error) { console.error(`❌ Error updating package.json: ${error.message}`); return false; } } // 主要执行逻辑:当包被导入时自动运行 function init() { console.log('\n🚀 cli-test package loaded!'); // 执行拷贝 copyDocsToConfig(); // 修改package.json addScriptToPackageJson(); } // 自动执行 init(); // 导出主要功能 module.exports = { copyDocsToConfig, addScriptToPackageJson };