feat: 分别打包

main
Lei OT 4 months ago
parent e58db1e5a8
commit 32b1af8b94

@ -18,7 +18,8 @@
"build:cjs": "babel src --out-dir build/cjs --plugins=@babel/plugin-transform-modules-commonjs", "build:cjs": "babel src --out-dir build/cjs --plugins=@babel/plugin-transform-modules-commonjs",
"build:esm": "babel src --out-dir build/esm", "build:esm": "babel src --out-dir build/esm",
"build": "npm run clean && npm run build:cjs && npm run build:esm", "build": "npm run clean && npm run build:cjs && npm run build:esm",
"pack": "npm run build && npm pack --pack-destination ./dist", "pack": "npm run build && node scripts/pack-modules.js",
"pack:all": "npm run build && npm pack --pack-destination ./dist && node scripts/pack-modules.js",
"test": "echo \"Error: no test specified\" && exit 1" "test": "echo \"Error: no test specified\" && exit 1"
}, },
"devDependencies": { "devDependencies": {

@ -0,0 +1,195 @@
const fs = require('fs');
const path = require('path');
const { execSync } = require('child_process');
const rimraf = require('rimraf');
// Get all files in src/utils directory
const utilsDir = path.join(__dirname, '..', 'src', 'utils');
const files = fs.readdirSync(utilsDir);
// Also get files directly in src directory (excluding utils directory)
const srcDir = path.join(__dirname, '..', 'src');
const srcFiles = fs.readdirSync(srcDir).filter(file =>
file !== 'utils' && file.endsWith('.js')
);
// Create dist directory if it doesn't exist
const distDir = path.join(__dirname, '..', 'dist');
if (!fs.existsSync(distDir)) {
fs.mkdirSync(distDir, { recursive: true });
}
// Clean up any previous temporary directories
const tempDir = path.join(__dirname, '..', 'temp_modules');
if (fs.existsSync(tempDir)) {
rimraf.sync(tempDir);
}
// Create temporary directory
fs.mkdirSync(tempDir, { recursive: true });
console.log('Building main package...');
execSync('npm run build', { stdio: 'inherit' });
// Process each module file in utils
files.forEach(file => {
if (file.endsWith('.js')) {
const moduleName = path.basename(file, '.js');
const moduleDir = path.join(tempDir, moduleName);
// Create module-specific directory
fs.mkdirSync(moduleDir, { recursive: true });
// Create a module-specific package.json
const packageJson = {
name: `@haina/${moduleName}`,
version: require('../package.json').version,
description: `Haina ${moduleName} module - part of @haina/npm utility library`,
main: `cjs/utils/${file}`,
module: `esm/utils/${file}`,
type: 'module',
files: [
"build"
],
scripts: {
postinstall: "node -e \"console.log('This is a sub-module of @haina/npm. For full documentation, see https://github.com/your-repo/haina-npm')\""
}
};
fs.writeFileSync(
path.join(moduleDir, 'package.json'),
JSON.stringify(packageJson, null, 2)
);
// Copy README if exists
const readmePath = path.join(__dirname, '..', 'README.MD');
if (fs.existsSync(readmePath)) {
const readmeContent = fs.readFileSync(readmePath, 'utf8');
// Add module-specific information to README
const moduleReadmeContent = `# @haina/${moduleName}\n\n${readmeContent}\n\n## Note\n\nThis is a standalone module from the \`@haina/npm\` package. \n\nFor more information about the full package, visit the [original repository](https://github.com/your-repo/haina-npm).\n`;
fs.writeFileSync(path.join(moduleDir, 'README.MD'), moduleReadmeContent);
}
// Create build directories and copy built files
const moduleBuildDir = path.join(moduleDir, 'build');
fs.mkdirSync(moduleBuildDir, { recursive: true });
// Copy the built ESM and CJS versions of the module
const esmSrcDir = path.join(__dirname, '..', 'build', 'esm', 'utils');
const cjsSrcDir = path.join(__dirname, '..', 'build', 'cjs', 'utils');
const esmDestDir = path.join(moduleBuildDir, 'esm', 'utils');
const cjsDestDir = path.join(moduleBuildDir, 'cjs', 'utils');
fs.mkdirSync(esmDestDir, { recursive: true });
fs.mkdirSync(cjsDestDir, { recursive: true });
// Copy the specific module file
fs.copyFileSync(
path.join(esmSrcDir, file),
path.join(esmDestDir, file)
);
fs.copyFileSync(
path.join(cjsSrcDir, file),
path.join(cjsDestDir, file)
);
// Run npm pack in the module directory
console.log(`Packing module: ${moduleName}`);
const result = execSync(`cd "${moduleDir}" && npm pack`, { encoding: 'utf8' });
console.log(result);
// Move the resulting .tgz file to the main dist directory
const tgzFiles = fs.readdirSync(moduleDir).filter(f => f.endsWith('.tgz'));
tgzFiles.forEach(tgzFile => {
const srcPath = path.join(moduleDir, tgzFile);
const destPath = path.join(distDir, `${moduleName}-${require('../package.json').version.replace(/v/, '')}.tgz`);
fs.renameSync(srcPath, destPath);
console.log(`Created: ${path.basename(destPath)}`);
});
}
});
// Process each file directly in src directory
srcFiles.forEach(file => {
if (file.endsWith('.js')) {
const moduleName = path.basename(file, '.js');
const moduleDir = path.join(tempDir, moduleName);
// Create module-specific directory
fs.mkdirSync(moduleDir, { recursive: true });
// Create a module-specific package.json
const packageJson = {
name: `@haina/${moduleName}`,
version: require('../package.json').version,
description: `Haina ${moduleName} module - part of @haina/npm utility library`,
main: `cjs/${file}`,
module: `esm/${file}`,
type: 'module',
files: [
"build"
],
scripts: {
postinstall: "node -e \"console.log('This is a sub-module of @haina/npm. For full documentation, see https://github.com/your-repo/haina-npm')\""
}
};
fs.writeFileSync(
path.join(moduleDir, 'package.json'),
JSON.stringify(packageJson, null, 2)
);
// Copy README if exists
const readmePath = path.join(__dirname, '..', 'README.MD');
if (fs.existsSync(readmePath)) {
const readmeContent = fs.readFileSync(readmePath, 'utf8');
// Add module-specific information to README
const moduleReadmeContent = `# @haina/${moduleName}\n\n${readmeContent}\n\n## Note\n\nThis is a standalone module from the \`@haina/npm\` package. \n\nFor more information about the full package, visit the [original repository](https://github.com/your-repo/haina-npm).\n`;
fs.writeFileSync(path.join(moduleDir, 'README.MD'), moduleReadmeContent);
}
// Create build directories and copy built files
const moduleBuildDir = path.join(moduleDir, 'build');
fs.mkdirSync(moduleBuildDir, { recursive: true });
// Copy the built ESM and CJS versions of the module
const esmSrcDir = path.join(__dirname, '..', 'build', 'esm');
const cjsSrcDir = path.join(__dirname, '..', 'build', 'cjs');
const esmDestDir = path.join(moduleBuildDir, 'esm');
const cjsDestDir = path.join(moduleBuildDir, 'cjs');
fs.mkdirSync(esmDestDir, { recursive: true });
fs.mkdirSync(cjsDestDir, { recursive: true });
// Copy the specific module file
fs.copyFileSync(
path.join(esmSrcDir, file),
path.join(esmDestDir, file)
);
fs.copyFileSync(
path.join(cjsSrcDir, file),
path.join(cjsDestDir, file)
);
// Run npm pack in the module directory
console.log(`Packing module: ${moduleName}`);
const result = execSync(`cd "${moduleDir}" && npm pack`, { encoding: 'utf8' });
console.log(result);
// Move the resulting .tgz file to the main dist directory
const tgzFiles = fs.readdirSync(moduleDir).filter(f => f.endsWith('.tgz'));
tgzFiles.forEach(tgzFile => {
const srcPath = path.join(moduleDir, tgzFile);
const destPath = path.join(distDir, `${moduleName}-${require('../package.json').version.replace(/v/, '')}.tgz`);
fs.renameSync(srcPath, destPath);
console.log(`Created: ${path.basename(destPath)}`);
});
}
});
// Clean up temporary directory
rimraf.sync(tempDir);
console.log('Module packing completed!');
Loading…
Cancel
Save