var fs = require('fs'); var path = require('path'); var webpack = require('webpack'); var pkg = require('./package'); const TerserPlugin = require('terser-webpack-plugin'); // replaceVersion var replaceVersion = function () { var filePath = path.resolve(__dirname, 'src/cos.js'); var content = fs.readFileSync(filePath).toString(); if (content) { var newContent = content.replace(/(COS\.version) *= *['"]\d+\.\d+\.\d+['"];/, "$1 = '" + pkg.version + "';"); if (newContent !== content) { fs.writeFileSync(filePath, newContent); console.log('cos.js version updated.'); } } }; var replaceDevCode = function (list) { list.forEach(function (fileName) { var filePath = path.resolve(__dirname, fileName); var content = fs.readFileSync(filePath).toString(); var newContent = content; newContent = newContent.replace(/https:\/\/\w+\.com\/[\w\-]+\/server\//, 'https://example.com/'); newContent = newContent.replace(/test-125\d{7}/, 'test-1250000000'); newContent = newContent.replace(/'proxy' => 'http:\/\/[^']+',/, "'proxy' => '',"); newContent = newContent.replace(/proxy: 'http:\/\/[^']+',/, "proxy: '',"); newContent = newContent.replace(/AKID\w+/, 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'); newContent = newContent.replace(/'secretKey' => '[^']+',/, "'secretKey' => 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',"); newContent = newContent.replace(/secretKey: '[^']+',/, "secretKey: 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',"); newContent = newContent.replace(/'allowActions' *=> *array\([^)]+\)/, `'allowActions' => array( // 所有 action 请看文档 https://cloud.tencent.com/document/product/436/31923 // 简单上传 'name/cos:PutObject', // 分片上传 'name/cos:InitiateMultipartUpload', 'name/cos:ListMultipartUploads', 'name/cos:ListParts', 'name/cos:UploadPart', 'name/cos:CompleteMultipartUpload' )`); if (newContent !== content) { console.log('replace ' + filePath); fs.writeFileSync(filePath, newContent); } }); }; replaceVersion(); module.exports = { mode: process.env.NODE_ENV, entry: path.resolve(__dirname, './index.js'), devtool: 'none', output: { path: path.resolve(__dirname, './dist'), publicPath: '/dist/', filename: 'cos-js-sdk-v5.js', libraryTarget: 'umd', library: 'COS', globalObject: 'this', }, module: { rules: [ { test: /\.js$/, loader: 'babel-loader', exclude: /node_modules/ } ] }, optimization: { minimize: false, minimizer: [ new TerserPlugin({ cache: true, parallel: true, sourceMap: true, extractComments: false, }), ], }, devServer: { historyApiFallback: true, noInfo: true }, performance: { hints: false }, }; if (process.env.NODE_ENV === 'production') { replaceDevCode([ 'demo/demo.js', 'demo/queue/index.js', 'test/test.js', 'server/sts.js', 'server/sts.php', ]); module.exports.output.filename = 'cos-js-sdk-v5.min.js'; module.exports.optimization = { minimize: true, minimizer: [ new TerserPlugin({ cache: true, parallel: true, sourceMap: true, extractComments: false, terserOptions: { compress: { drop_debugger: true, drop_console: true, }, format: { comments: false, // 删除注释 }, }, }), ], }; module.exports.plugins = (module.exports.plugins || []).concat([ new webpack.DefinePlugin({ 'process.env': { NODE_ENV: '"production"' } }), new webpack.LoaderOptionsPlugin({ minimize: true }), ]); }