You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							92 lines
						
					
					
						
							1.8 KiB
						
					
					
				
			
		
		
	
	
							92 lines
						
					
					
						
							1.8 KiB
						
					
					
				| "use strict";
 | |
| 
 | |
| /* eslint-disable @typescript-eslint/no-var-requires */
 | |
| 
 | |
| /* eslint-disable @typescript-eslint/explicit-function-return-type */
 | |
| const rollup = require('rollup');
 | |
| 
 | |
| const ora = require('ora');
 | |
| 
 | |
| const util = require('util');
 | |
| 
 | |
| const {
 | |
|   external,
 | |
|   globals,
 | |
|   plugins
 | |
| } = require('./config');
 | |
| 
 | |
| async function build({
 | |
|   name,
 | |
|   input,
 | |
|   babelConfig = {},
 | |
|   commonJSConfig = {},
 | |
|   file,
 | |
|   watch = false,
 | |
|   minify
 | |
| }) {
 | |
|   const inputOptions = {
 | |
|     input,
 | |
|     plugins: plugins({
 | |
|       babelConfig,
 | |
|       minify,
 | |
|       commonJSConfig
 | |
|     }),
 | |
|     external
 | |
|   };
 | |
|   const outputOptions = {
 | |
|     format: 'iife',
 | |
|     name,
 | |
|     globals
 | |
|   };
 | |
| 
 | |
|   if (file) {
 | |
|     outputOptions.file = file;
 | |
|   }
 | |
| 
 | |
|   if (!minify) {
 | |
|     outputOptions.sourcemap = 'inline';
 | |
|   }
 | |
| 
 | |
|   if (watch) {
 | |
|     const bundle = await rollup.rollup(inputOptions);
 | |
| 
 | |
|     if (process.env.DEBUG_BUNDLER) {
 | |
|       // eslint-disable-next-line no-console
 | |
|       console.log(util.inspect(bundle.watchFiles, {
 | |
|         maxArrayLength: null
 | |
|       }));
 | |
|     }
 | |
| 
 | |
|     const spinner = ora(`Bundling files in watchmode: ${JSON.stringify(inputOptions)}`);
 | |
|     const watcher = rollup.watch({ ...inputOptions,
 | |
|       output: outputOptions
 | |
|     });
 | |
|     watcher.on('event', event => {
 | |
|       if (event.code === 'START') {
 | |
|         spinner.start('Bundling files...');
 | |
|       }
 | |
| 
 | |
|       if (event.code === 'ERROR' || event.code === 'FATAL') {
 | |
|         spinner.fail('Bundle fail:'); // eslint-disable-next-line no-console
 | |
| 
 | |
|         console.log(event);
 | |
|       }
 | |
| 
 | |
|       if (event.code === 'END') {
 | |
|         spinner.succeed(`Finish bundling: ${bundle.watchFiles.length} files`);
 | |
|       }
 | |
|     });
 | |
|     return watcher;
 | |
|   }
 | |
| 
 | |
|   const bundle = await rollup.rollup(inputOptions);
 | |
| 
 | |
|   if (file) {
 | |
|     return bundle.write(outputOptions);
 | |
|   }
 | |
| 
 | |
|   const bundled = await bundle.generate(outputOptions);
 | |
|   return bundled.output[0];
 | |
| }
 | |
| 
 | |
| module.exports = build; |