Blame view

node_modules/zrender/build/build.js 3.47 KB
bd028579   易尊强   2/28
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
  // const typescript = require('@rollup/plugin-typescript');
  const typescript = require('rollup-plugin-typescript2');
  const replace = require('@rollup/plugin-replace');
  const rollup = require('rollup');
  const path = require('path');
  const processs = require('process');
  const chalk = require('chalk');
  const progress = require('./progress');
  const UglifyJS = require('uglify-js');
  const fs = require('fs');
  
  function current() {
      return (new Date()).toLocaleString();
  }
  
  function createInputOption(env, isWatch) {
      return {
          input: path.resolve(__dirname, '../index.ts'),
          plugins: [
              typescript({
                  clean: !isWatch,
                  tsconfigOverride: {
                      compilerOptions: {
                          // Rollup don't use CommonJS by default.
                          module: 'ES2015',
                          sourceMap: true,
                          // Use the esm d.ts
                          declaration: false
                      }
                  }
              }),
              replace({
                  preventAssignment: true,
                  'process.env.NODE_ENV': JSON.stringify(env)
              }),
              progress({
                  scope: {
                      total: 0
                  }
              })
          ]
      };
  }
  
  const outputOption = {
      format: 'umd',
      file: path.resolve(__dirname, '../dist/zrender.js'),
      sourcemap: true,
      name: 'zrender'
  };
  
  function minify(outPath) {
      const code = fs.readFileSync(outPath, 'utf-8');
      const uglifyResult = UglifyJS.minify(code);
      if (uglifyResult.error) {
          throw new Error(uglifyResult.error);
      }
      fs.writeFileSync(outPath, uglifyResult.code, 'utf-8');
  }
  
  if (processs.argv.includes('--watch')) {
      const watcher = rollup.watch({
          ...createInputOption('development', true),
          output: [outputOption],
          watch: {
              clearScreen: true
          }
      });
      watcher.on('event', event => {
          switch(event.code) {
              // case 'START':
              //     console.log(chalk.green('Begin to watch'));
              //     break;
              case 'BUNDLE_START':
                  console.log(
                      chalk.gray(current()),
                      chalk.blue('File changed. Begin to bundle')
                  );
                  break;
              case 'BUNDLE_END':
                  console.log(
                      chalk.gray(current()),
                      chalk.green('Finished bundle')
                  );
                  break;
              case 'ERROR':
                  console.log(
                      chalk.gray(current()),
                      chalk.red(event.error)
                  );
                  break;
          }
      });
  }
  else {
      // Unminified
      rollup.rollup({
          ...createInputOption('development', false)
      }).then(bundle => {
          bundle.write(outputOption)
              .then(() => {
                  // Minified
                  if (process.argv.indexOf('--minify') >= 0) {
                      rollup.rollup({
                          ...createInputOption('production', false)
                      }).then(bundle => {
                          const file = outputOption.file.replace(/.js$/, '.min.js');
                          bundle.write(Object.assign(outputOption, {
                              file,
                              sourcemap: false
                          })).then(function () {
                              minify(file);
                          });
                      });
                  }
              });
      });
  }