zz-shopify-components
Version:
Reusable Shopify components for theme projects
52 lines (40 loc) • 1.48 kB
JavaScript
console.log('Running postinstall-v3...');
const fs = require('fs-extra');
const path = require('path');
const rootDir = path.resolve(__dirname, '..');
const targetDirs = ['sections', 'snippets', 'blocks', 'assets'];
const projectRoot = process.cwd(); // 安装者项目根目录
const configPath = path.join(rootDir, 'component.config.json');
let whitelist = new Set();
if (fs.existsSync(configPath)) {
try {
const config = fs.readJsonSync(configPath);
if (Array.isArray(config.whitelist)) {
whitelist = new Set(config.whitelist.map((p) => path.normalize(p)));
}
} catch (err) {
console.warn('⚠️ 无法解析 component.config.json:', err.message);
}
}
const shouldCopy = (fileRelativePath) => {
const fileName = path.basename(fileRelativePath);
const normalizedPath = path.normalize(fileRelativePath);
return fileName.startsWith('zz-') || whitelist.has(normalizedPath);
};
targetDirs.forEach((dir) => {
const sourceDir = path.join(rootDir, dir);
const targetDir = path.join(projectRoot, dir);
if (!fs.existsSync(sourceDir)) return;
const files = fs.readdirSync(sourceDir);
files.forEach((file) => {
const relativePath = path.join(dir, file);
if (shouldCopy(relativePath)) {
const from = path.join(sourceDir, file);
const to = path.join(targetDir, file);
fs.ensureDirSync(targetDir);
fs.copySync(from, to);
console.log(`✅ 拷贝: ${relativePath}`);
}
});
});