瀏覽代碼

打包到七牛

张保健 5 年之前
父節點
當前提交
61eea22cf5
共有 5 個文件被更改,包括 449 次插入16 次删除
  1. 82 0
      build/build-cdn.js
  2. 3 0
      build/cdn.json
  3. 151 0
      build/webpack.prod-cdn.conf.js
  4. 209 15
      package-lock.json
  5. 4 1
      package.json

+ 82 - 0
build/build-cdn.js 查看文件

1
+'use strict'
2
+require('./check-versions')()
3
+
4
+process.env.NODE_ENV = 'production'
5
+
6
+const ora = require('ora')
7
+const rm = require('rimraf')
8
+const path = require('path')
9
+const chalk = require('chalk')
10
+const webpack = require('webpack')
11
+const config = require('../config')
12
+const webpackConfig = require('./webpack.prod-cdn.conf')
13
+const writeJson = require('write-json')
14
+const QiniuPlugin = require('qiniu-webpack-plugin')
15
+// const utils = require('./utils')
16
+
17
+const spinner = ora('building for production...')
18
+spinner.start()
19
+
20
+const cdn_ver = require('./cdn.json').version
21
+
22
+const addVer = (ver) => {
23
+  const ar = ver.split('.')
24
+  ar[2] = parseInt(ar[2]) + 1
25
+  return ar.join('.')
26
+}
27
+
28
+const verNow = addVer(cdn_ver)
29
+
30
+webpackConfig.plugins.push(new QiniuPlugin({
31
+  ACCESS_KEY: 'E5sYahBxp7RfMECLXhCUZJD3U_BTKYGsPDS4NLFd',
32
+  SECRET_KEY: 'mlO3FEmRX-S_9XPCf9WrkvzgnpZ8IlmHeiVrIDQF',
33
+  bucket: 'vue',
34
+  path: `pad/${verNow}/`
35
+}))
36
+
37
+webpackConfig.output.publicPath = `//pwxva08mn.bkt.clouddn.com/pad/${verNow}/`
38
+// webpackConfig.output.filename = utils.assetsPath('js/[name].js')
39
+// webpackConfig.output.chunkFilename = utils.assetsPath('js/[id].js')
40
+
41
+// console.log(webpackConfig.plugins)
42
+// console.log(typeof webpackConfig.plugins)
43
+// console.log(Object.keys(webpackConfig.plugins))
44
+// webpackConfig.plugins.filter((el)=>{
45
+//   console.log(el)
46
+// })
47
+// return
48
+
49
+rm(path.join(config.build.assetsRoot, config.build.assetsSubDirectory), err => {
50
+  if (err) throw err
51
+  console.log('run build')
52
+  webpack(webpackConfig, (err, stats) => {
53
+    spinner.stop()
54
+    if (err) throw err
55
+    process.stdout.write(stats.toString({
56
+      colors: true,
57
+      modules: false,
58
+      children: false, // If you are using ts-loader, setting this to true will make TypeScript errors show up during build.
59
+      chunks: false,
60
+      chunkModules: false
61
+    }) + '\n\n')
62
+
63
+    if (stats.hasErrors()) {
64
+      console.log(chalk.red('  Build failed with errors.\n'))
65
+      process.exit(1)
66
+    }
67
+    console.log('verNow,', verNow)
68
+
69
+    writeJson.promise(path.join(__dirname, './cdn.json'), {
70
+      version: verNow
71
+    }).then(function() {
72
+      // do stuff
73
+      console.log('write cdn.json ok')
74
+    })
75
+
76
+    console.log(chalk.cyan('  Build complete.\n'))
77
+    console.log(chalk.yellow(
78
+      '  Tip: built files are meant to be served over an HTTP server.\n' +
79
+      '  Opening index.html over file:// won\'t work.\n'
80
+    ))
81
+  })
82
+})

+ 3 - 0
build/cdn.json 查看文件

1
+{
2
+  "version": "1.0.2"
3
+}

+ 151 - 0
build/webpack.prod-cdn.conf.js 查看文件

1
+'use strict'
2
+const path = require('path')
3
+const utils = require('./utils')
4
+const webpack = require('webpack')
5
+const config = require('../config')
6
+const merge = require('webpack-merge')
7
+const baseWebpackConfig = require('./webpack.base.conf')
8
+const CopyWebpackPlugin = require('copy-webpack-plugin')
9
+const HtmlWebpackPlugin = require('html-webpack-plugin')
10
+const ExtractTextPlugin = require('extract-text-webpack-plugin')
11
+const OptimizeCSSPlugin = require('optimize-css-assets-webpack-plugin')
12
+const UglifyJsPlugin = require('uglifyjs-webpack-plugin')
13
+
14
+const env = require('../config/prod.env')
15
+
16
+const webpackConfig = merge(baseWebpackConfig, {
17
+  module: {
18
+    rules: utils.styleLoaders({
19
+      sourceMap: config.build.productionSourceMap,
20
+      extract: true,
21
+      usePostCSS: true
22
+    })
23
+  },
24
+  devtool: config.build.productionSourceMap ? config.build.devtool : false,
25
+  output: {
26
+    path: config.build.assetsRoot,
27
+    filename: utils.assetsPath('js/[name].[chunkhash:6].js'), // .[chunkhash:6]
28
+    chunkFilename: utils.assetsPath('js/[id].[chunkhash:6].js') //.[chunkhash:6]
29
+  },
30
+  plugins: [
31
+    new webpack.DefinePlugin({
32
+      'process.env': env
33
+    }),
34
+    new UglifyJsPlugin({
35
+      uglifyOptions: {
36
+        compress: {
37
+          warnings: false
38
+        }
39
+      },
40
+      sourceMap: config.build.productionSourceMap,
41
+      parallel: true
42
+    }),
43
+    // extract css into its own file
44
+    new ExtractTextPlugin({
45
+      filename: utils.assetsPath('css/[name].[contenthash:6].css'), //
46
+      // Setting the following option to `false` will not extract CSS from codesplit chunks.
47
+      // Their CSS will instead be inserted dynamically with style-loader when the codesplit chunk has been loaded by webpack.
48
+      // It's currently set to `true` because we are seeing that sourcemaps are included in the codesplit bundle as well when it's `false`,
49
+      // increasing file size: https://github.com/vuejs-templates/webpack/issues/1110
50
+      allChunks: true,
51
+    }),
52
+    // Compress extracted CSS. We are using this plugin so that possible
53
+    // duplicated CSS from different components can be deduped.
54
+    new OptimizeCSSPlugin({
55
+      cssProcessorOptions: config.build.productionSourceMap
56
+        ? { safe: true, map: { inline: false } }
57
+        : { safe: true }
58
+    }),
59
+    // generate dist index.html with correct asset hash for caching.
60
+    // you can customize output by editing /index.html
61
+    // see https://github.com/ampedandwired/html-webpack-plugin
62
+    new HtmlWebpackPlugin({
63
+      filename: config.build.index,
64
+      template: 'index.html',
65
+      inject: true,
66
+      minify: {
67
+        removeComments: true,
68
+        collapseWhitespace: true,
69
+        removeAttributeQuotes: true
70
+        // more options:
71
+        // https://github.com/kangax/html-minifier#options-quick-reference
72
+      },
73
+      // 公共文件必须在自己引用的js文件之前引用 by vinceHuang
74
+      // chunks:['mainfest','vender','app'],
75
+      // necessary to consistently work with multiple chunks via CommonsChunkPlugin
76
+      // chunksSortMode: 'dependency'
77
+    }),
78
+    // keep module.id stable when vendor modules does not change
79
+    // new webpack.HashedModuleIdsPlugin(),
80
+    // enable scope hoisting
81
+    // new webpack.optimize.ModuleConcatenationPlugin(),
82
+    // split vendor js into its own file
83
+    // new webpack.optimize.CommonsChunkPlugin({
84
+    //   name: 'vendor',
85
+    //   minChunks (module) {
86
+    //     // any required modules inside node_modules are extracted to vendor
87
+    //     return (
88
+    //       module.resource &&
89
+    //       /\.js$/.test(module.resource) &&
90
+    //       module.resource.indexOf(
91
+    //         path.join(__dirname, '../node_modules')
92
+    //       ) === 0
93
+    //     )
94
+    //   }
95
+    // }),
96
+    // extract webpack runtime and module manifest to its own file in order to
97
+    // prevent vendor hash from being updated whenever app bundle is updated
98
+    // new webpack.optimize.CommonsChunkPlugin({
99
+    //   name: 'manifest',
100
+    //   minChunks: Infinity
101
+    // }),
102
+    // This instance extracts shared chunks from code splitted chunks and bundles them
103
+    // in a separate chunk, similar to the vendor chunk
104
+    // see: https://webpack.js.org/plugins/commons-chunk-plugin/#extra-async-commons-chunk
105
+    // new webpack.optimize.CommonsChunkPlugin({
106
+    //   name: 'app',
107
+    //   async: 'vendor-async',
108
+    //   children: true,
109
+    //   minChunks: 3
110
+    // }),
111
+
112
+    // copy custom static assets
113
+    new CopyWebpackPlugin([
114
+      {
115
+        from: path.resolve(__dirname, '../static'),
116
+        to: config.build.assetsSubDirectory,
117
+        ignore: ['.*']
118
+      }
119
+    ])
120
+  ]
121
+})
122
+
123
+if (config.build.productionGzip) {
124
+  const CompressionWebpackPlugin = require('compression-webpack-plugin')
125
+
126
+  webpackConfig.plugins.push(
127
+    new CompressionWebpackPlugin({
128
+      asset: '[path].gz[query]',
129
+      algorithm: 'gzip',
130
+      test: new RegExp(
131
+        '\\.(' +
132
+        config.build.productionGzipExtensions.join('|') +
133
+        ')$'
134
+      ),
135
+      threshold: 10240,
136
+      minRatio: 0.8
137
+    })
138
+  )
139
+}
140
+
141
+if (config.build.bundleAnalyzerReport) {
142
+  const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin
143
+  webpackConfig.plugins.push(new BundleAnalyzerPlugin())
144
+}
145
+
146
+webpackConfig.plugins = webpackConfig.plugins || [];
147
+
148
+webpackConfig.devtool = "source-map"
149
+
150
+
151
+module.exports = webpackConfig

+ 209 - 15
package-lock.json 查看文件

910
       "version": "2.0.6",
910
       "version": "2.0.6",
911
       "resolved": "http://registry.npm.taobao.org/asap/download/asap-2.0.6.tgz",
911
       "resolved": "http://registry.npm.taobao.org/asap/download/asap-2.0.6.tgz",
912
       "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=",
912
       "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=",
913
-      "dev": true,
914
-      "optional": true
913
+      "dev": true
915
     },
914
     },
916
     "asn1": {
915
     "asn1": {
917
       "version": "0.2.4",
916
       "version": "0.2.4",
2306
       "resolved": "http://registry.npm.taobao.org/boom/download/boom-2.10.1.tgz",
2305
       "resolved": "http://registry.npm.taobao.org/boom/download/boom-2.10.1.tgz",
2307
       "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=",
2306
       "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=",
2308
       "dev": true,
2307
       "dev": true,
2308
+      "optional": true,
2309
       "requires": {
2309
       "requires": {
2310
         "hoek": "2.x.x"
2310
         "hoek": "2.x.x"
2311
       }
2311
       }
2467
         "isarray": "^1.0.0"
2467
         "isarray": "^1.0.0"
2468
       }
2468
       }
2469
     },
2469
     },
2470
+    "buffer-concat": {
2471
+      "version": "0.0.1",
2472
+      "resolved": "https://registry.npmjs.org/buffer-concat/-/buffer-concat-0.0.1.tgz",
2473
+      "integrity": "sha1-Q+Hjx389IvtVvqaJCpLQN3jEwQo=",
2474
+      "dev": true
2475
+    },
2470
     "buffer-from": {
2476
     "buffer-from": {
2471
       "version": "1.1.1",
2477
       "version": "1.1.1",
2472
       "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
2478
       "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
3410
       "resolved": "http://registry.npm.taobao.org/countup.js/download/countup.js-1.9.3.tgz",
3416
       "resolved": "http://registry.npm.taobao.org/countup.js/download/countup.js-1.9.3.tgz",
3411
       "integrity": "sha1-zj5QzXFgRB5HjwfaMYle3MDxyd0="
3417
       "integrity": "sha1-zj5QzXFgRB5HjwfaMYle3MDxyd0="
3412
     },
3418
     },
3419
+    "crc32": {
3420
+      "version": "0.2.2",
3421
+      "resolved": "https://registry.npmjs.org/crc32/-/crc32-0.2.2.tgz",
3422
+      "integrity": "sha1-etIg1v/c0Rn5/BJ6d3LKzqOQpLo=",
3423
+      "dev": true
3424
+    },
3413
     "create-ecdh": {
3425
     "create-ecdh": {
3414
       "version": "4.0.3",
3426
       "version": "4.0.3",
3415
       "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz",
3427
       "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz",
5597
         "mime-types": "^2.1.12"
5609
         "mime-types": "^2.1.12"
5598
       }
5610
       }
5599
     },
5611
     },
5612
+    "formstream": {
5613
+      "version": "0.0.7",
5614
+      "resolved": "https://registry.npmjs.org/formstream/-/formstream-0.0.7.tgz",
5615
+      "integrity": "sha1-mB0ANnQ1lsVIIO49+0S6yhg0l4g=",
5616
+      "dev": true,
5617
+      "requires": {
5618
+        "buffer-concat": "0.0.1",
5619
+        "mime": "1.2.9",
5620
+        "pause-stream": ">=0.0.10"
5621
+      },
5622
+      "dependencies": {
5623
+        "mime": {
5624
+          "version": "1.2.9",
5625
+          "resolved": "https://registry.npmjs.org/mime/-/mime-1.2.9.tgz",
5626
+          "integrity": "sha1-AJzUCGe9Nd5SGzuWbwTi+NTRPQk=",
5627
+          "dev": true
5628
+        }
5629
+      }
5630
+    },
5600
     "forwarded": {
5631
     "forwarded": {
5601
       "version": "0.1.2",
5632
       "version": "0.1.2",
5602
       "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz",
5633
       "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz",
5704
         "ansi-regex": {
5735
         "ansi-regex": {
5705
           "version": "2.1.1",
5736
           "version": "2.1.1",
5706
           "bundled": true,
5737
           "bundled": true,
5707
-          "dev": true
5738
+          "dev": true,
5739
+          "optional": true
5708
         },
5740
         },
5709
         "aproba": {
5741
         "aproba": {
5710
           "version": "1.2.0",
5742
           "version": "1.2.0",
5725
         "balanced-match": {
5757
         "balanced-match": {
5726
           "version": "1.0.0",
5758
           "version": "1.0.0",
5727
           "bundled": true,
5759
           "bundled": true,
5728
-          "dev": true
5760
+          "dev": true,
5761
+          "optional": true
5729
         },
5762
         },
5730
         "brace-expansion": {
5763
         "brace-expansion": {
5731
           "version": "1.1.11",
5764
           "version": "1.1.11",
5732
           "bundled": true,
5765
           "bundled": true,
5733
           "dev": true,
5766
           "dev": true,
5767
+          "optional": true,
5734
           "requires": {
5768
           "requires": {
5735
             "balanced-match": "^1.0.0",
5769
             "balanced-match": "^1.0.0",
5736
             "concat-map": "0.0.1"
5770
             "concat-map": "0.0.1"
5745
         "code-point-at": {
5779
         "code-point-at": {
5746
           "version": "1.1.0",
5780
           "version": "1.1.0",
5747
           "bundled": true,
5781
           "bundled": true,
5748
-          "dev": true
5782
+          "dev": true,
5783
+          "optional": true
5749
         },
5784
         },
5750
         "concat-map": {
5785
         "concat-map": {
5751
           "version": "0.0.1",
5786
           "version": "0.0.1",
5752
           "bundled": true,
5787
           "bundled": true,
5753
-          "dev": true
5788
+          "dev": true,
5789
+          "optional": true
5754
         },
5790
         },
5755
         "console-control-strings": {
5791
         "console-control-strings": {
5756
           "version": "1.1.0",
5792
           "version": "1.1.0",
5757
           "bundled": true,
5793
           "bundled": true,
5758
-          "dev": true
5794
+          "dev": true,
5795
+          "optional": true
5759
         },
5796
         },
5760
         "core-util-is": {
5797
         "core-util-is": {
5761
           "version": "1.0.2",
5798
           "version": "1.0.2",
5872
         "inherits": {
5909
         "inherits": {
5873
           "version": "2.0.3",
5910
           "version": "2.0.3",
5874
           "bundled": true,
5911
           "bundled": true,
5875
-          "dev": true
5912
+          "dev": true,
5913
+          "optional": true
5876
         },
5914
         },
5877
         "ini": {
5915
         "ini": {
5878
           "version": "1.3.5",
5916
           "version": "1.3.5",
5884
           "version": "1.0.0",
5922
           "version": "1.0.0",
5885
           "bundled": true,
5923
           "bundled": true,
5886
           "dev": true,
5924
           "dev": true,
5925
+          "optional": true,
5887
           "requires": {
5926
           "requires": {
5888
             "number-is-nan": "^1.0.0"
5927
             "number-is-nan": "^1.0.0"
5889
           }
5928
           }
5898
           "version": "3.0.4",
5937
           "version": "3.0.4",
5899
           "bundled": true,
5938
           "bundled": true,
5900
           "dev": true,
5939
           "dev": true,
5940
+          "optional": true,
5901
           "requires": {
5941
           "requires": {
5902
             "brace-expansion": "^1.1.7"
5942
             "brace-expansion": "^1.1.7"
5903
           }
5943
           }
5905
         "minimist": {
5945
         "minimist": {
5906
           "version": "0.0.8",
5946
           "version": "0.0.8",
5907
           "bundled": true,
5947
           "bundled": true,
5908
-          "dev": true
5948
+          "dev": true,
5949
+          "optional": true
5909
         },
5950
         },
5910
         "minipass": {
5951
         "minipass": {
5911
           "version": "2.2.4",
5952
           "version": "2.2.4",
5912
           "bundled": true,
5953
           "bundled": true,
5913
           "dev": true,
5954
           "dev": true,
5955
+          "optional": true,
5914
           "requires": {
5956
           "requires": {
5915
             "safe-buffer": "^5.1.1",
5957
             "safe-buffer": "^5.1.1",
5916
             "yallist": "^3.0.0"
5958
             "yallist": "^3.0.0"
5929
           "version": "0.5.1",
5971
           "version": "0.5.1",
5930
           "bundled": true,
5972
           "bundled": true,
5931
           "dev": true,
5973
           "dev": true,
5974
+          "optional": true,
5932
           "requires": {
5975
           "requires": {
5933
             "minimist": "0.0.8"
5976
             "minimist": "0.0.8"
5934
           }
5977
           }
6009
         "number-is-nan": {
6052
         "number-is-nan": {
6010
           "version": "1.0.1",
6053
           "version": "1.0.1",
6011
           "bundled": true,
6054
           "bundled": true,
6012
-          "dev": true
6055
+          "dev": true,
6056
+          "optional": true
6013
         },
6057
         },
6014
         "object-assign": {
6058
         "object-assign": {
6015
           "version": "4.1.1",
6059
           "version": "4.1.1",
6021
           "version": "1.4.0",
6065
           "version": "1.4.0",
6022
           "bundled": true,
6066
           "bundled": true,
6023
           "dev": true,
6067
           "dev": true,
6068
+          "optional": true,
6024
           "requires": {
6069
           "requires": {
6025
             "wrappy": "1"
6070
             "wrappy": "1"
6026
           }
6071
           }
6106
         "safe-buffer": {
6151
         "safe-buffer": {
6107
           "version": "5.1.1",
6152
           "version": "5.1.1",
6108
           "bundled": true,
6153
           "bundled": true,
6109
-          "dev": true
6154
+          "dev": true,
6155
+          "optional": true
6110
         },
6156
         },
6111
         "safer-buffer": {
6157
         "safer-buffer": {
6112
           "version": "2.1.2",
6158
           "version": "2.1.2",
6142
           "version": "1.0.2",
6188
           "version": "1.0.2",
6143
           "bundled": true,
6189
           "bundled": true,
6144
           "dev": true,
6190
           "dev": true,
6191
+          "optional": true,
6145
           "requires": {
6192
           "requires": {
6146
             "code-point-at": "^1.0.0",
6193
             "code-point-at": "^1.0.0",
6147
             "is-fullwidth-code-point": "^1.0.0",
6194
             "is-fullwidth-code-point": "^1.0.0",
6161
           "version": "3.0.1",
6208
           "version": "3.0.1",
6162
           "bundled": true,
6209
           "bundled": true,
6163
           "dev": true,
6210
           "dev": true,
6211
+          "optional": true,
6164
           "requires": {
6212
           "requires": {
6165
             "ansi-regex": "^2.0.0"
6213
             "ansi-regex": "^2.0.0"
6166
           }
6214
           }
6204
         "wrappy": {
6252
         "wrappy": {
6205
           "version": "1.0.2",
6253
           "version": "1.0.2",
6206
           "bundled": true,
6254
           "bundled": true,
6207
-          "dev": true
6255
+          "dev": true,
6256
+          "optional": true
6208
         },
6257
         },
6209
         "yallist": {
6258
         "yallist": {
6210
           "version": "3.0.2",
6259
           "version": "3.0.2",
6211
           "bundled": true,
6260
           "bundled": true,
6212
-          "dev": true
6261
+          "dev": true,
6262
+          "optional": true
6213
         }
6263
         }
6214
       }
6264
       }
6215
     },
6265
     },
6667
       "version": "2.16.3",
6717
       "version": "2.16.3",
6668
       "resolved": "http://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz",
6718
       "resolved": "http://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz",
6669
       "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=",
6719
       "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=",
6670
-      "dev": true
6720
+      "dev": true,
6721
+      "optional": true
6671
     },
6722
     },
6672
     "home-or-tmp": {
6723
     "home-or-tmp": {
6673
       "version": "2.0.0",
6724
       "version": "2.0.0",
6814
         }
6865
         }
6815
       }
6866
       }
6816
     },
6867
     },
6868
+    "http-basic": {
6869
+      "version": "2.5.1",
6870
+      "resolved": "https://registry.npmjs.org/http-basic/-/http-basic-2.5.1.tgz",
6871
+      "integrity": "sha1-jORHvbW2xXf4pj4/p4BW7Eu02/s=",
6872
+      "dev": true,
6873
+      "requires": {
6874
+        "caseless": "~0.11.0",
6875
+        "concat-stream": "^1.4.6",
6876
+        "http-response-object": "^1.0.0"
6877
+      },
6878
+      "dependencies": {
6879
+        "caseless": {
6880
+          "version": "0.11.0",
6881
+          "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.11.0.tgz",
6882
+          "integrity": "sha1-cVuW6phBWTzDMGeSP17GDr2k99c=",
6883
+          "dev": true
6884
+        }
6885
+      }
6886
+    },
6817
     "http-deceiver": {
6887
     "http-deceiver": {
6818
       "version": "1.2.7",
6888
       "version": "1.2.7",
6819
       "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz",
6889
       "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz",
6889
         }
6959
         }
6890
       }
6960
       }
6891
     },
6961
     },
6962
+    "http-response-object": {
6963
+      "version": "1.1.0",
6964
+      "resolved": "https://registry.npmjs.org/http-response-object/-/http-response-object-1.1.0.tgz",
6965
+      "integrity": "sha1-p8TnWq6C87tJBOT0P2FWc7TVGMM=",
6966
+      "dev": true
6967
+    },
6892
     "http-signature": {
6968
     "http-signature": {
6893
       "version": "1.2.0",
6969
       "version": "1.2.0",
6894
       "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
6970
       "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
10037
         "pinkie-promise": "^2.0.0"
10113
         "pinkie-promise": "^2.0.0"
10038
       }
10114
       }
10039
     },
10115
     },
10116
+    "pause-stream": {
10117
+      "version": "0.0.11",
10118
+      "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz",
10119
+      "integrity": "sha1-/lo0sMvOErWqaitAPuLnO2AvFEU=",
10120
+      "dev": true,
10121
+      "requires": {
10122
+        "through": "~2.3"
10123
+      }
10124
+    },
10040
     "pbkdf2": {
10125
     "pbkdf2": {
10041
       "version": "3.0.16",
10126
       "version": "3.0.16",
10042
       "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.16.tgz",
10127
       "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.16.tgz",
12341
       "resolved": "http://registry.npm.taobao.org/promise/download/promise-7.3.1.tgz",
12426
       "resolved": "http://registry.npm.taobao.org/promise/download/promise-7.3.1.tgz",
12342
       "integrity": "sha1-BktyYCsY+Q8pGSuLG8QY/9Hr078=",
12427
       "integrity": "sha1-BktyYCsY+Q8pGSuLG8QY/9Hr078=",
12343
       "dev": true,
12428
       "dev": true,
12344
-      "optional": true,
12345
       "requires": {
12429
       "requires": {
12346
         "asap": "~2.0.3"
12430
         "asap": "~2.0.3"
12347
       }
12431
       }
12456
       "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=",
12540
       "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=",
12457
       "dev": true
12541
       "dev": true
12458
     },
12542
     },
12543
+    "qiniu": {
12544
+      "version": "6.1.13",
12545
+      "resolved": "https://registry.npmjs.org/qiniu/-/qiniu-6.1.13.tgz",
12546
+      "integrity": "sha1-V/XWCXTGTYhx2A8n331DIRrjTwM=",
12547
+      "dev": true,
12548
+      "requires": {
12549
+        "crc32": "0.2.2",
12550
+        "formstream": "0.0.7",
12551
+        "mime": "1.2.9",
12552
+        "sync-request": "3.0.1",
12553
+        "urllib": "0.5.1"
12554
+      },
12555
+      "dependencies": {
12556
+        "mime": {
12557
+          "version": "1.2.9",
12558
+          "resolved": "https://registry.npmjs.org/mime/-/mime-1.2.9.tgz",
12559
+          "integrity": "sha1-AJzUCGe9Nd5SGzuWbwTi+NTRPQk=",
12560
+          "dev": true
12561
+        }
12562
+      }
12563
+    },
12564
+    "qiniu-webpack-plugin": {
12565
+      "version": "0.4.2",
12566
+      "resolved": "https://registry.npmjs.org/qiniu-webpack-plugin/-/qiniu-webpack-plugin-0.4.2.tgz",
12567
+      "integrity": "sha1-eeSzD3KErNsOWP8os+PYaYQb/ts=",
12568
+      "dev": true,
12569
+      "requires": {
12570
+        "promise": "^7.1.1",
12571
+        "qiniu": "^6.1.9",
12572
+        "slash": "^1.0.0"
12573
+      }
12574
+    },
12459
     "qr.js": {
12575
     "qr.js": {
12460
       "version": "0.0.0",
12576
       "version": "0.0.0",
12461
       "resolved": "http://registry.npm.taobao.org/qr.js/download/qr.js-0.0.0.tgz",
12577
       "resolved": "http://registry.npm.taobao.org/qr.js/download/qr.js-0.0.0.tgz",
14504
       "integrity": "sha1-rifbOPZgp64uHDt9G8KQgZuFGeY=",
14620
       "integrity": "sha1-rifbOPZgp64uHDt9G8KQgZuFGeY=",
14505
       "dev": true
14621
       "dev": true
14506
     },
14622
     },
14623
+    "sync-request": {
14624
+      "version": "3.0.1",
14625
+      "resolved": "https://registry.npmjs.org/sync-request/-/sync-request-3.0.1.tgz",
14626
+      "integrity": "sha1-yqEjWq+Im6UBB2oYNMQ2gwqC+3M=",
14627
+      "dev": true,
14628
+      "requires": {
14629
+        "concat-stream": "^1.4.7",
14630
+        "http-response-object": "^1.0.1",
14631
+        "then-request": "^2.0.1"
14632
+      }
14633
+    },
14507
     "table": {
14634
     "table": {
14508
       "version": "4.0.2",
14635
       "version": "4.0.2",
14509
       "resolved": "https://registry.npmjs.org/table/-/table-4.0.2.tgz",
14636
       "resolved": "https://registry.npmjs.org/table/-/table-4.0.2.tgz",
14581
       "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=",
14708
       "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=",
14582
       "dev": true
14709
       "dev": true
14583
     },
14710
     },
14711
+    "then-request": {
14712
+      "version": "2.2.0",
14713
+      "resolved": "https://registry.npmjs.org/then-request/-/then-request-2.2.0.tgz",
14714
+      "integrity": "sha1-ZnizL6DKIY/laZgbvYhxtZQGDYE=",
14715
+      "dev": true,
14716
+      "requires": {
14717
+        "caseless": "~0.11.0",
14718
+        "concat-stream": "^1.4.7",
14719
+        "http-basic": "^2.5.1",
14720
+        "http-response-object": "^1.1.0",
14721
+        "promise": "^7.1.1",
14722
+        "qs": "^6.1.0"
14723
+      },
14724
+      "dependencies": {
14725
+        "caseless": {
14726
+          "version": "0.11.0",
14727
+          "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.11.0.tgz",
14728
+          "integrity": "sha1-cVuW6phBWTzDMGeSP17GDr2k99c=",
14729
+          "dev": true
14730
+        }
14731
+      }
14732
+    },
14584
     "throat": {
14733
     "throat": {
14585
       "version": "4.1.0",
14734
       "version": "4.1.0",
14586
       "resolved": "https://registry.npmjs.org/throat/-/throat-4.1.0.tgz",
14735
       "resolved": "https://registry.npmjs.org/throat/-/throat-4.1.0.tgz",
15152
         "requires-port": "^1.0.0"
15301
         "requires-port": "^1.0.0"
15153
       }
15302
       }
15154
     },
15303
     },
15304
+    "urllib": {
15305
+      "version": "0.5.1",
15306
+      "resolved": "https://registry.npmjs.org/urllib/-/urllib-0.5.1.tgz",
15307
+      "integrity": "sha1-niVrK3A9/gpZY3yw27QwjtVxlxs=",
15308
+      "dev": true,
15309
+      "requires": {
15310
+        "buffer-concat": "0.0.1",
15311
+        "debug": "0.7.2"
15312
+      },
15313
+      "dependencies": {
15314
+        "debug": {
15315
+          "version": "0.7.2",
15316
+          "resolved": "https://registry.npmjs.org/debug/-/debug-0.7.2.tgz",
15317
+          "integrity": "sha1-BWaSyGZwl38RXegpF5GLjouaEPA=",
15318
+          "dev": true
15319
+        }
15320
+      }
15321
+    },
15155
     "use": {
15322
     "use": {
15156
       "version": "3.1.1",
15323
       "version": "3.1.1",
15157
       "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz",
15324
       "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz",
16458
         "signal-exit": "^3.0.2"
16625
         "signal-exit": "^3.0.2"
16459
       }
16626
       }
16460
     },
16627
     },
16628
+    "write-json": {
16629
+      "version": "3.0.1",
16630
+      "resolved": "https://registry.npmjs.org/write-json/-/write-json-3.0.1.tgz",
16631
+      "integrity": "sha512-PWscN8FOlnT0oSuN3vuq9FW2Wjwh3fqSRFgd75NHiHApIdi55bnbLI5nyFQwaiqEn73+w8B9NVC36SWHCKwHhw==",
16632
+      "dev": true,
16633
+      "requires": {
16634
+        "isobject": "^3.0.1",
16635
+        "write": "^1.0.3"
16636
+      },
16637
+      "dependencies": {
16638
+        "isobject": {
16639
+          "version": "3.0.1",
16640
+          "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
16641
+          "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
16642
+          "dev": true
16643
+        },
16644
+        "write": {
16645
+          "version": "1.0.3",
16646
+          "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz",
16647
+          "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==",
16648
+          "dev": true,
16649
+          "requires": {
16650
+            "mkdirp": "^0.5.1"
16651
+          }
16652
+        }
16653
+      }
16654
+    },
16461
     "ws": {
16655
     "ws": {
16462
       "version": "5.2.2",
16656
       "version": "5.2.2",
16463
       "resolved": "https://registry.npmjs.org/ws/-/ws-5.2.2.tgz",
16657
       "resolved": "https://registry.npmjs.org/ws/-/ws-5.2.2.tgz",

+ 4 - 1
package.json 查看文件

12
     "test": "npm run unit && npm run e2e",
12
     "test": "npm run unit && npm run e2e",
13
     "lint": "eslint --ext .js,.vue src test/unit test/e2e/specs",
13
     "lint": "eslint --ext .js,.vue src test/unit test/e2e/specs",
14
     "build": "cross-env NODE_ENV=production env_config=prod node build/build.js && npm run fixfont && npm run fiximg",
14
     "build": "cross-env NODE_ENV=production env_config=prod node build/build.js && npm run fixfont && npm run fiximg",
15
+    "build-cdn": "node build/build-cdn.js",
15
     "fixfont": "xcopy %cd%\\dist\\static\\fonts %cd%\\dist\\static\\css\\static\\fonts /s /y /d /e /i",
16
     "fixfont": "xcopy %cd%\\dist\\static\\fonts %cd%\\dist\\static\\css\\static\\fonts /s /y /d /e /i",
16
     "fiximg": "xcopy %cd%\\dist\\static\\img %cd%\\dist\\static\\css\\static\\img /s /y /d /e /i"
17
     "fiximg": "xcopy %cd%\\dist\\static\\img %cd%\\dist\\static\\css\\static\\img /s /y /d /e /i"
17
   },
18
   },
99
     "webpack-bundle-analyzer": "^2.9.0",
100
     "webpack-bundle-analyzer": "^2.9.0",
100
     "webpack-dev-server": "^2.9.1",
101
     "webpack-dev-server": "^2.9.1",
101
     "webpack-merge": "^4.1.0",
102
     "webpack-merge": "^4.1.0",
102
-    "yaml-loader": "^0.5.0"
103
+    "yaml-loader": "^0.5.0",
104
+    "write-json": "^3.0.1",
105
+    "qiniu-webpack-plugin": "^0.4.2"
103
   },
106
   },
104
   "engines": {
107
   "engines": {
105
     "node": ">= 6.0.0",
108
     "node": ">= 6.0.0",