jscompiler.js 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. const { rollup } = require('rollup');
  2. const babel = require('rollup-plugin-babel');
  3. const resolve = require('rollup-plugin-node-resolve');
  4. const commonjs = require('rollup-plugin-commonjs');
  5. const path = require('path');
  6. global.rollupCache = global.rollupCache || {};
  7. function camelCase(str) {
  8. return str.replace(/(?:^\w|[A-Z]|\b\w|[-_])/g, (letter, index) => {
  9. return index == 0 ? letter.toLowerCase() : letter.toUpperCase();
  10. }).replace(/\s+/g, '').replace(/[`~!@#$%^&*()_|+\-=?;:'",.<>\{\}\[\]\\\/]/gi, '');
  11. }
  12. function jscompiler(config) {
  13. const {
  14. file,
  15. dest
  16. } = config;
  17. const fileName = path.basename(file);
  18. const extension = path.extname(fileName);
  19. const singleFileName = fileName.replace(extension, '');
  20. const cache = global.rollupCache[fileName] ? global.rollupCache[fileName] : null;
  21. const format = (config.hasOwnProperty('format') ? config.format : 'iife');
  22. const strict = (config.hasOwnProperty('strict') ? config.strict : true);
  23. const sourcemap = (config.hasOwnProperty('sourcemap') ? config.sourcemap : false);
  24. const moduleID = (config.hasOwnProperty('moduleID') ? config.moduleID : false);
  25. let name = (config.hasOwnProperty('name') ? config.name : camelCase(singleFileName));
  26. let outPutFile = path.join(__dirname, '../', dest, fileName);
  27. let customFileName = (config.hasOwnProperty('fileName') ? config.fileName : false);
  28. if (customFileName) {
  29. customFileName = customFileName.replace('{name}', singleFileName);
  30. outPutFile = outPutFile.replace(fileName, customFileName);
  31. }
  32. return new Promise((res, rej) => {
  33. rollup({
  34. input: file,
  35. cache: cache,
  36. plugins: [
  37. resolve({
  38. mainFields: ['module', 'main'],
  39. browser: true,
  40. }),
  41. commonjs(),
  42. babel({
  43. comments: false,
  44. exclude: 'node_modules/**',
  45. presets: [
  46. ['@babel/preset-env', {
  47. modules: false
  48. }]
  49. ]
  50. }),
  51. ]
  52. }).then((bundle) => {
  53. global.rollupCache[fileName] = bundle.cache;
  54. bundle.write({
  55. file: outPutFile,
  56. format: format, // amd, cjs, esm, iife, umd
  57. strict: strict,
  58. sourcemap: sourcemap,
  59. name: (moduleID ? moduleID : name)
  60. }).then(() => {
  61. res(true);
  62. }).catch(error => {
  63. console.error(error)
  64. rej(error);
  65. });
  66. return outPutFile;
  67. }).catch(error => {
  68. console.log(error)
  69. throw new Error(error);
  70. })
  71. })
  72. }
  73. module.exports = jscompiler;