import { GeneratorAPI } from "@/lib/generatorAPI"; import { RootOptions } from "@/types"; import cliPluginBabel from "./../cli-plugin-babel/generator"; export default function(api: GeneratorAPI, options: Required): void { api.extendPackage({ scripts: { start: "npm run serve", serve: "luban-cli-service serve --open", build: "luban-cli-service build", inspect: "luban-cli-service inspect", }, }); if (api.hasNoAnyFeatures()) { api.render("./../../../../template/hasNoAnyFeatures"); return; } // --------------------------------------------------------------------------- const modifyFile = options.preset.plugins["cli-plugin-typescript"] ? "src/App.tsx" : "src/App.jsx"; // dir service do not has /src api.render("./../../../../template/service", { modifyFile }); api.extendPackage({ dependencies: { react: "^16.12.0", "react-dom": "^16.12.0", "react-hot-loader": "^4.12.16", }, devDependencies: { prettier: "^1.19.1", }, browserslist: ["last 1 version", "> 1%", "maintained node versions", "not ie <= 10", "not dead"], }); if (options.preset.cssPreprocessor) { if (options.preset.cssPreprocessor === "less") { api.extendPackage({ devDependencies: { less: "^3.10.0", }, }) } if (options.preset.cssPreprocessor === "styled-components") { api.extendPackage({ dependencies: { "styled-components": "^4.4.0", }, }) } if (options.preset.cssPreprocessor === "less" && !api.useTsWithBabel()) { api.render("./../../../template/lessWithJS", { modifyFile }); } if (options.preset.cssPreprocessor === "less" && api.useTsWithBabel()) { api.render("./../../../template/lessWithTS", { modifyFile }); } if (options.preset.cssPreprocessor === "styled-components" && !api.useTsWithBabel()) { api.render("./../../../template/styledComponentsWithJS", { modifyFile }); } if (options.preset.cssPreprocessor === "styled-components" && api.useTsWithBabel()) { api.render("./../../../template/styledComponentsWithTS", { modifyFile }); } } else if (!options.preset.plugins["cli-plugin-typescript"]) { api.render("./../../../template/basicWithJS", { modifyFile }); } if (options.preset.cssPreprocessor === undefined && options.preset.plugins["cli-plugin-typescript"]) { api.render("./../../../template/basicWithTS", { modifyFile }); } // postcss dependencies selected babel or typescript if (options.preset.plugins["cli-plugin-babel"] || options.preset.plugins["cli-plugin-typescript"]) { api.extendPackage({ devDependencies: { autoprefixer: "^9.7.1", cssnano: "^4.1.10", "postcss-preset-env": "^6.7.0", }, }); } if (options.preset.configs) { api.extendPackage(options.preset.configs); } // selected typescript and useTsWithBabel is true also not selected babel if (api.useTsWithBabel() && !options.preset.plugins["cli-plugin-babel"]) { cliPluginBabel(api, options); } }