UNPKG

cs-init

Version:
311 lines (282 loc) 12.4 kB
const fs = require('fs'); const path = require('path'); const rootDir = process.env.INIT_CWD || process.cwd(); const packageJsonStr = fs.readFileSync(path.resolve(__dirname, 'package.json'), 'utf8'); const packageJson = JSON.parse(packageJsonStr); packageJson.scripts = { "dev": "webpack serve", "build": "webpack", }; // create package.json const packageJsonPath = path.join(rootDir, 'package.json'); if (!fs.existsSync(packageJsonPath)) { fs.writeFileSync(packageJsonPath, JSON.stringify(packageJson, null, 2)); // fs.writeFileSync(packageJsonPath, packageJsonStr); console.log('package.json created:', packageJsonPath); } else { console.log('package.json already exists:', packageJsonPath); } // create webpack-config.js const webpackConfigPath = path.join(rootDir, 'webpack.config.js'); const webpackConfigContent = ` const fs = require('fs'); const path = require('path'); const MiniCssExtractPlugin = require("mini-css-extract-plugin"); const CssMinimizerPlugin = require("css-minimizer-webpack-plugin"); const TerserPlugin = require("terser-webpack-plugin"); const fileNames = fs.readdirSync('./src').reduce((acc, name) => { return { ...acc, [name.replace('.scss', '')]: './src/' + name }; }, {}); module.exports = () => { const isDev = !!process.env.WEBPACK_SERVE || !!process.env.npm_config_debug; return { mode: isDev ? 'development' : 'production', entry: fileNames, watch: isDev, watchOptions: { ignored: '**/node_modules', }, output: { filename: '[name]', path: path.resolve(__dirname, 'dist'), }, module: { rules: [ { test: /\\.s?css$/, // besser mit \\ use: [ isDev ? 'style-loader' : MiniCssExtractPlugin.loader, 'css-loader', 'sass-loader' ], }, ], }, performance: { hints: false, maxEntrypointSize: 512000, maxAssetSize: 512000 }, optimization: { minimizer: [ new TerserPlugin({ terserOptions: { compress: { drop_console: !isDev, }, }, }), new CssMinimizerPlugin(), ], usedExports: true, }, plugins: [ // MiniCssExtractPlugin nur aktiv, wenn in Production (build) ...(!isDev ? [ new MiniCssExtractPlugin({ filename: '[name].css', }) ] : []), { apply: (compiler) => { compiler.hooks.done.tap('CleanDistPlugin', (stats) => { if (isDev) return; const distPath = path.resolve(compiler.options.output.path); fs.readdir(distPath, (err, files) => { if (err) throw err; for (const file of files) { if (file.indexOf('.') === -1) { fs.unlink(path.join(distPath, file), (err) => { if (err) throw err; }); } } }); }); } } ], devServer: { allowedHosts: "all", headers: { "Access-Control-Allow-Origin": "*", "Access-Control-Allow-Methods": "GET, POST, PUT, DELETE, PATCH, OPTIONS", "Access-Control-Allow-Headers": "X-Requested-With, content-type, Authorization" }, static: [ { directory: path.join(__dirname, 'assets'), publicPath: '/assets', }, { directory: path.join(__dirname, 'dist'), }, ], hot: false, client: false, compress: true, port: 8080, server: { type: 'https', options: { key: fs.readFileSync('./certs/server.key'), cert: fs.readFileSync('./certs/server.crt') } } } } }; `; if (!fs.existsSync(webpackConfigPath)) { fs.writeFileSync(webpackConfigPath, webpackConfigContent.trim()); console.log('webpack.config.js created:', webpackConfigPath); } else { console.log('webpack.config.js already exists:', webpackConfigPath); } // create self signed default cert const certsPath = path.join(rootDir, '/certs'); if (!fs.existsSync(certsPath)) { fs.mkdirSync(certsPath); } const crtContent = `-----BEGIN CERTIFICATE----- MIIFkzCCA3ugAwIBAgIUeqjkPB9fgYqmYnkSZ6OhGkb/sUEwDQYJKoZIhvcNAQEL BQAwWTELMAkGA1UEBhMCREUxEzARBgNVBAgMClNvbWUtU3RhdGUxITAfBgNVBAoM GEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZDESMBAGA1UEAwwJbG9jYWxob3N0MB4X DTI0MDczMTIyNDMzNVoXDTM0MDcyOTIyNDMzNVowWTELMAkGA1UEBhMCREUxEzAR BgNVBAgMClNvbWUtU3RhdGUxITAfBgNVBAoMGEludGVybmV0IFdpZGdpdHMgUHR5 IEx0ZDESMBAGA1UEAwwJbG9jYWxob3N0MIICIjANBgkqhkiG9w0BAQEFAAOCAg8A MIICCgKCAgEAyTm4W/FjiuLauPtcYjjhZJa0ikAuKloKLCARE/6A06rIZgLy8wCO 08N0m5w8qS/mxgRNK0Ku9NydMu5xkPLWWeb3f1qDM+1dLuyDNKNlrw6gGSNGT38n 7drfZjlEopI/U6BaKMOUCuzrk5BJTFy/nHXEq6aXKEA4M87xU3lrAMOVGo8/tFTm 2MKDuQRbwjK1xNdeGXI/rl8ceJZ8IcTKxm9LOl9KWyf8cCCZ18Rm35pOCVC6tme2 0fPy8voCDzkwdxfzn0Nr3dtBEIjxAqmDi5xv4PtmT5BLL0WJSbyoXQbbauqr3Eb/ PObhbEltU8NrF278NYldGsBKpup9qQ9/HjBcNlM8AaRrUoXjW7JEqZgxIfpSnQ+x cW9Gx2NA+sJDDo6bIZT7rrOZeQieMUlciq4WwxLtgqFPzUWZNicXb9BxQCJTKBol 7ewQUjT9rKhmZO6g2Ym4XugDQhjT3DkpZHlQv61cBh3ACO+Zj5H0lWwZiOpqVxLc fPW49KKKAOfAulSIQEr8e3iogMycpZx7rH4WgEKcWPU5OCTlPzauriXtjpqF4+KZ dxyZZOtZHLE/mmuCpqruqsqb8tIcXd1CJcLkbBiBsaiFyC91k18sdUf5XPYW2xpx 7EMicHg1l8LUBAtLuWItoIlXyuwObnb2II/Q2q9Ue+u6KexR9pWMdc0CAwEAAaNT MFEwHQYDVR0OBBYEFD+kI8uboR+BL7I9L5fYSOmLIhcwMB8GA1UdIwQYMBaAFD+k I8uboR+BL7I9L5fYSOmLIhcwMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEL BQADggIBAEivYDRRhl9TaICqRFq81tT0LnizQE60Zsk2OVKxSCtYNvqjYMXGvEXc GOkFfiYd+UqxCjTfoSqCcWI03fR6cGNJYcW3DDE3OZIRi/956PNk7AfGKGvUM2Sr ZDUYCMBzs+fK8EuAtZa5Q4UiuYqMatAroQZaM5j/x4+ML8GZ8lR/VsabavcEtdcF rRn/wRWAgZAa7arz4NNA1UO3cu6kGJ9gSrFT6ErduI2fL3tbFP/P6lBON/ToHqCS ZewXArl1J1UeMregpt9xitdyI8UOv3LXuKcQzUsvsjLUwRRXkv3vJ0wuqz12If5G B/o+RQzpqw0/VrD84rI5wHyuiVW/dxWG6WHY3mhkgBiZoWYl+qs7mS7/3il88xcA Iw1wXxzR+gaAEmDT5HWx6sdMbnxGErxmAFSQjBMsW6TmOTJmLuup/9O+zAREMPG3 QXRm3M0tghL6UDHCGeh7uvYCGG8QZPJhlcsVYYYCNk4YPmP6uTi5aR8DN4Vv8ht+ sQ1zqlMRGvGg8A3cP0O9qOGhCBu1V2Ctfdf+dkUs4BnokIe17f6jPdCG/+M6SL5G 0RRroUdjFeLeX9MtUlBtSLbEf8OUd1WxLJ8QETF+ljba4xDEB4ZB5ORbxl4xhK43 FZkeyIpuYJ3SUpdW30E3yNev6Obm8FWGoMtvGb57+5859HzmKnsL -----END CERTIFICATE----- `; const certPath = path.join(certsPath, 'server.crt'); if (!fs.existsSync(certPath)) { fs.writeFileSync(certPath, crtContent); console.log('server.crt created:', certPath); } else { console.log('server.crt already exists:', certPath); } const keyContent = `-----BEGIN PRIVATE KEY----- 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 lTbrEOqph+jxzn/+CCw+x9JdlpWBHSI= -----END PRIVATE KEY----- `; const keyPath = path.join(certsPath, 'server.key'); if (!fs.existsSync(keyPath)) { fs.writeFileSync(keyPath, keyContent); console.log('server.key created:', keyPath); } else { console.log('server.key already exists:', keyPath); } // create src const srcDir = path.join(rootDir, 'src'); if (!fs.existsSync(srcDir)) { fs.mkdirSync(srcDir); console.log('Directory created:', srcDir); } else { console.log('Directory already exists:', srcDir); } // create default variation-01.js const variation01JsContent = ` import './variation-01.scss'; import { waitFor, qs } from 'codeschmiede-toolkit'; (() => { console.log('V1'); waitFor('body', (body) => { if(!body) return; }); })(); `; const srcScript = path.join(srcDir, 'variation-01.js'); if (!fs.existsSync(srcScript)) { fs.writeFileSync(srcScript, variation01JsContent); console.log('variation-01.js created:', srcScript); } else { console.log('variation-01.js already exists:', srcScript); } // create default variation-01.scss const srcStyle = path.join(srcDir, 'variation-01.scss'); if (!fs.existsSync(srcStyle)) { fs.writeFileSync(srcStyle, ''); console.log('variation-01.scss created:', srcStyle); } else { console.log('variation-01.scss already exists:', srcStyle); } // create assets const assetsDir = path.join(rootDir, 'assets'); if (!fs.existsSync(assetsDir)) { fs.mkdirSync(assetsDir); console.log('Directory created:', assetsDir); } else { console.log('Directory already exists:', assetsDir); }