@lidhium/cli
Version:
micro-frontend cli packed with webpack
164 lines (163 loc) • 7.22 kB
JavaScript
;
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const file_manager_1 = require("../file-manager");
const chalk_1 = __importDefault(require("chalk"));
const config_1 = require("../config");
const fs_1 = __importDefault(require("fs"));
const common_1 = require("../utils/common");
exports.default = () => (appName) => __awaiter(void 0, void 0, void 0, function* () {
(0, common_1.printLibraryHeader)();
const isFileExist = fs_1.default.existsSync(`./lidhium.config.json`);
if (isFileExist) {
console.error(chalk_1.default.red(`lidhium.config.json already exists`), chalk_1.default.green(`Run ${chalk_1.default.magenta(`'lidhium generate <appName> <Port> for creating a new app'`)}`));
return;
}
const { selectedApp, selectedBundle } = {
selectedApp: "Vue3",
selectedBundle: "webpack",
};
// await inquirer.prompt([
// {
// type: "list", // Works like a radio button
// name: "selectedApp",
// message: "Select App:",
// choices: ["Vue3", "React", "Angular"],
// },
// {
// type: "list", // Works like a radio button
// name: "selectedBundle",
// message: "Select Bundler:",
// choices: ["webpack", "vite"],
// },
// ]);
console.log(selectedApp, selectedBundle);
console.log(chalk_1.default.green(`Creating ${appName}`));
(0, file_manager_1.createFolder)(`./${appName}`);
(0, file_manager_1.createFolder)(`./${appName}/apps`);
(0, file_manager_1.createFolder)(`./${appName}/global`);
(0, file_manager_1.createFile)(`./${appName}/lidhium.config.json`, JSON.stringify({
project: appName,
webapp: selectedApp.toLowerCase(),
bundler: selectedBundle,
apps: {},
}, null, 2));
(0, file_manager_1.createFile)(`./${appName}/package.json`, JSON.stringify({
name: appName,
private: true,
scripts: {
start: "lidhium start",
build: "lidhium build",
"dev-tool": "lidhium dev-tool",
},
dependencies: {
"@module-federation/runtime": "^0.11.4",
"core-js": "3.40.0",
"eslint-config-prettier": "10.0.1",
fs: "^0.0.1-security",
"node-polyfill-webpack-plugin": "^4.1.0",
postcss: "^8.4.35",
prettier: "^3.4.2",
"regenerator-runtime": "0.14.1",
"register-service-worker": "^1.7.2",
tailwindcss: "^3.4.1",
vue: "3",
"vue-class-component": "^8.0.0-0",
"vue-router": "^4.5.0",
vuex: "^4.0.0",
webpack: "^5.97.1",
"webpack-cli": "^6.0.1",
"webpack-merge": "^6.0.1",
},
devDependencies: {
"@babel/core": "^7.26.0",
"@babel/preset-env": "^7.26.0",
"@lidhium/common": "1.0.6",
"@types/jest": "^29.5.14",
"@types/mocha": "^10.0.10",
"@types/node": "^22.13.8",
"@types/webpack-env": "^1.18.4",
"@typescript-eslint/eslint-plugin": "^8.24.1",
"@typescript-eslint/parser": "^8.24.1",
"@vue/cli-plugin-babel": "~5.0.0",
"@vue/cli-plugin-e2e-cypress": "~5.0.0",
"@vue/cli-plugin-eslint": "~5.0.0",
"@vue/cli-plugin-pwa": "~5.0.0",
"@vue/cli-plugin-router": "~5.0.0",
"@vue/cli-plugin-typescript": "~5.0.0",
"@vue/cli-plugin-unit-jest": "~5.0.0",
"@vue/cli-plugin-vuex": "~5.0.0",
"@vue/cli-service": "~5.0.0",
"@vue/eslint-config-standard": "^9.0.0",
"@vue/eslint-config-typescript": "^14.4.0",
"@vue/test-utils": "^2.0.0-0",
"@vue/vue3-jest": "^29.2.6",
ajv: "^8.17.1",
"ajv-keywords": "^5.1.0",
autoprefixer: "^10.4.17",
"babel-jest": "^29.7.0",
"babel-loader": "^9.2.1",
"css-loader": "^7.1.2",
cypress: "^14.0.3",
eslint: "^9.21.0",
"eslint-plugin-import": "^2.25.3",
"eslint-plugin-node": "^11.1.0",
"eslint-plugin-promise": "^7.2.1",
"eslint-plugin-vue": "^9.32.0",
"file-loader": "^6.2.0",
jest: "^29.7.0",
sass: "^1.83.1",
"sass-loader": "^16.0.4",
"schema-utils": "^4.3.0",
"style-loader": "^4.0.0",
"terser-webpack-plugin": "^5.3.12",
"ts-jest": "^29.2.6",
"ts-loader": "^9.5.1",
typescript: "^5.7.2",
"vue-loader": "^17.4.2",
"vue-template-compiler": "^2.7.16",
"webpack-bundle-analyzer": "^4.10.2",
"webpack-dev-server": "^5.2.0",
"compression-webpack-plugin": "^11.1.0",
},
}, null, 2));
(0, file_manager_1.createFile)(`./${appName}/tsconfig.json`, JSON.stringify({
compilerOptions: {
target: "ESNext",
module: "ESNext",
strict: true,
jsx: "preserve",
moduleResolution: "Node",
experimentalDecorators: true,
skipLibCheck: true,
esModuleInterop: true,
allowSyntheticDefaultImports: true,
forceConsistentCasingInFileNames: true,
useDefineForClassFields: true,
sourceMap: true,
lib: ["ESNext", "DOM", "DOM.Iterable", "ScriptHost"],
paths: {
"@config": ["./package.json"],
},
types: ["webpack-env", "jest"],
},
exclude: ["node_modules", "dist"],
}, null, 2));
(0, file_manager_1.copyFolder)(`../static/config_files`, `./${appName}`);
(0, file_manager_1.copyFolder)(`../static/global`, `./${appName}/global`);
console.log(chalk_1.default.green(`Created ${chalk_1.default.yellow(appName)} with ${chalk_1.default.yellow(selectedApp)} and ${chalk_1.default.yellow(selectedBundle)} successfully`));
console.log(chalk_1.default.green(`Run ${chalk_1.default.magenta(`cd ${appName}`)}`));
console.log(chalk_1.default.green(`Run ${chalk_1.default.magenta(`install dependencies`)}`));
console.log(chalk_1.default.green(`For more details visit ${chalk_1.default.magenta(`${config_1.config.docs.webUrl}/docs/getting-started`)}`));
});