flexible-shipping
Last commit date
assets
17 hours ago
classes
17 hours ago
inc
17 hours ago
lang
16 hours ago
src
17 hours ago
templates
17 hours ago
vendor
16 hours ago
vendor_prefixed
17 hours ago
changelog.txt
17 hours ago
composer.json
17 hours ago
flexible-shipping.php
17 hours ago
readme.txt
17 hours ago
vite.config.js
17 hours ago
vite.config.js
157 lines
| 1 | const path = require( 'path' ); |
| 2 | const { defineConfig, transformWithOxc } = require( 'vite' ); |
| 3 | |
| 4 | const rootDir = __dirname; |
| 5 | const outputDir = path.resolve( rootDir, 'assets' ); |
| 6 | |
| 7 | const scriptEntries = [ |
| 8 | { |
| 9 | input: 'assets-src/rules-settings/js/index.jsx', |
| 10 | name: 'FlexibleShippingRulesSettings', |
| 11 | output: 'js/rules-settings.js', |
| 12 | }, |
| 13 | { |
| 14 | input: 'assets-src/onboarding/js/index.jsx', |
| 15 | name: 'FlexibleShippingOnboarding', |
| 16 | output: 'js/onboarding.js', |
| 17 | }, |
| 18 | { |
| 19 | input: 'assets-src/js/new-rules-table-popup.js', |
| 20 | name: 'FlexibleShippingNewRulesTablePopup', |
| 21 | output: 'js/new-rules-table-popup.js', |
| 22 | }, |
| 23 | ]; |
| 24 | |
| 25 | const styleEntries = [ |
| 26 | { |
| 27 | input: 'assets-src/rules-settings/scss/style.scss', |
| 28 | output: 'css/rules-settings.css', |
| 29 | }, |
| 30 | { |
| 31 | input: 'assets-src/onboarding/scss/style.scss', |
| 32 | output: 'css/onboarding.css', |
| 33 | }, |
| 34 | { |
| 35 | input: 'assets-src/admin/scss/admin.scss', |
| 36 | output: 'css/admin.css', |
| 37 | }, |
| 38 | { |
| 39 | input: 'assets-src/scss/new-rules-table-popup.scss', |
| 40 | output: 'css/new-rules-table-popup.css', |
| 41 | }, |
| 42 | { |
| 43 | input: 'assets-src/free-shipping/scss/style.scss', |
| 44 | output: 'dist/css/free-shipping.css', |
| 45 | }, |
| 46 | ]; |
| 47 | |
| 48 | function createBuildConfig( entry, options ) { |
| 49 | const isScript = Boolean( entry.name ); |
| 50 | const production = Boolean( options.production ); |
| 51 | const watch = Boolean( options.watch ); |
| 52 | |
| 53 | return defineConfig( { |
| 54 | root: rootDir, |
| 55 | publicDir: false, |
| 56 | mode: production ? 'production' : 'development', |
| 57 | plugins: [ |
| 58 | { |
| 59 | name: 'flexible-shipping-jsx-in-js', |
| 60 | async transform( code, id ) { |
| 61 | if ( ! id.includes( `${ path.sep }assets-src${ path.sep }` ) || ! id.endsWith( '.js' ) ) { |
| 62 | return null; |
| 63 | } |
| 64 | |
| 65 | if ( id.includes( `${ path.sep }assets-src${ path.sep }blocks${ path.sep }` ) ) { |
| 66 | return null; |
| 67 | } |
| 68 | |
| 69 | return transformWithOxc( code, id.replace( /\.js$/, '.jsx' ), { |
| 70 | loader: 'jsx', |
| 71 | } ); |
| 72 | }, |
| 73 | }, |
| 74 | { |
| 75 | name: 'flexible-shipping-remove-empty-style-chunks', |
| 76 | generateBundle( outputOptions, bundle ) { |
| 77 | if ( isScript ) { |
| 78 | return; |
| 79 | } |
| 80 | |
| 81 | Object.keys( bundle ).forEach( ( fileName ) => { |
| 82 | const output = bundle[ fileName ]; |
| 83 | |
| 84 | if ( output.type === 'chunk' && output.code.trim() === '' ) { |
| 85 | delete bundle[ fileName ]; |
| 86 | } |
| 87 | } ); |
| 88 | }, |
| 89 | }, |
| 90 | ], |
| 91 | css: { |
| 92 | preprocessorOptions: { |
| 93 | scss: { |
| 94 | includePaths: [ |
| 95 | path.resolve( rootDir, 'node_modules' ), |
| 96 | ], |
| 97 | }, |
| 98 | }, |
| 99 | }, |
| 100 | build: { |
| 101 | copyPublicDir: false, |
| 102 | cssCodeSplit: true, |
| 103 | cssMinify: production, |
| 104 | emptyOutDir: false, |
| 105 | manifest: false, |
| 106 | minify: production ? 'terser' : false, |
| 107 | outDir: outputDir, |
| 108 | rollupOptions: { |
| 109 | external: isScript ? [ '@wordpress/i18n' ] : [], |
| 110 | input: path.resolve( rootDir, entry.input ), |
| 111 | output: { |
| 112 | assetFileNames: entry.output, |
| 113 | entryFileNames: isScript ? entry.output : '_empty/[name].js', |
| 114 | format: isScript ? 'iife' : 'es', |
| 115 | globals: { |
| 116 | '@wordpress/i18n': 'wp.i18n', |
| 117 | }, |
| 118 | name: entry.name, |
| 119 | }, |
| 120 | }, |
| 121 | terserOptions: production ? { |
| 122 | compress: { |
| 123 | drop_console: true, |
| 124 | pure_funcs: [ |
| 125 | 'console.debug', |
| 126 | 'console.error', |
| 127 | 'console.info', |
| 128 | 'console.log', |
| 129 | 'console.warn', |
| 130 | 'window.console.debug', |
| 131 | 'window.console.error', |
| 132 | 'window.console.info', |
| 133 | 'window.console.log', |
| 134 | 'window.console.warn', |
| 135 | ], |
| 136 | }, |
| 137 | format: { |
| 138 | comments: false, |
| 139 | }, |
| 140 | } : undefined, |
| 141 | watch: watch ? {} : null, |
| 142 | }, |
| 143 | } ); |
| 144 | } |
| 145 | |
| 146 | function createViteBuilds( options = {} ) { |
| 147 | return [ |
| 148 | ...scriptEntries, |
| 149 | ...styleEntries, |
| 150 | ].map( ( entry ) => createBuildConfig( entry, options ) ); |
| 151 | } |
| 152 | |
| 153 | module.exports = createBuildConfig( scriptEntries[0], { |
| 154 | production: process.env.NODE_ENV === 'production', |
| 155 | } ); |
| 156 | module.exports.createViteBuilds = createViteBuilds; |
| 157 |