create-new-webpack-app
Version:
CLI for scaffolding webpack projects using default config, framework templates, loader or plugins templates
47 lines (46 loc) • 2.2 kB
JavaScript
import { dirname, resolve } from "path";
import { spawn } from "cross-spawn";
import { fileURLToPath } from "url";
export default async function (plop) {
const __dirname = dirname(fileURLToPath(import.meta.url));
plop.setPlopfilePath(resolve(__dirname, "../plopfile.js"));
plop.setDefaultInclude({ actions: true });
plop.setActionType("install-dependencies", (answers, config) => {
const options = {
cwd: config.path,
stdio: [
"inherit", // Use parent's stdio configuration
process.stdout.isTTY ? "inherit" : "pipe", // Pipe child process' stdout to parent's stdout
process.stderr.isTTY ? "inherit" : "pipe", // Pipe child process' stderr to parent's stderr
],
};
// promise to complete subprocess of installing packages and return a message
const returnPromise = new Promise((resolve, reject) => {
var _a, _b;
const returnMessage = `Project dependencies installed successfully!`;
const packageManager = answers.packageManager;
const packages = config.packages.length == 1 ? [config.packages[0]] : config.packages;
const installOptions = {
npm: ["install", "--save-dev"],
yarn: ["add", "-D"],
pnpm: ["install", "--save-dev"],
};
const npmInstallPackages = spawn(`${packageManager}`, [...installOptions[packageManager], ...packages], options);
(_a = npmInstallPackages.stdout) === null || _a === void 0 ? void 0 : _a.on("data", (data) => {
console.log(data.toString());
});
(_b = npmInstallPackages.stderr) === null || _b === void 0 ? void 0 : _b.on("data", (data) => {
console.warn(data.toString());
});
npmInstallPackages.on("exit", (code) => {
if (code === 0) {
resolve(returnMessage);
}
else {
reject(`Error occurred while installing packages\n Exit code: ${code}`);
}
});
});
return returnPromise;
});
}