1
0
Эх сурвалжийг харах

replace env vars during compile time

ktsn 8 жил өмнө
parent
commit
683a6ca072

+ 81 - 0
build/build.main.js

@@ -0,0 +1,81 @@
+const fs = require('fs')
+const path = require('path')
+const zlib = require('zlib')
+const uglify = require('uglify-js')
+const rollup = require('rollup')
+const configs = require('./configs')
+
+if (!fs.existsSync('dist')) {
+  fs.mkdirSync('dist')
+}
+
+build(Object.keys(configs).map(key => configs[key]))
+
+function build (builds) {
+  let built = 0
+  const total = builds.length
+  const next = () => {
+    buildEntry(builds[built]).then(() => {
+      built++
+      if (built < total) {
+        next()
+      }
+    }).catch(logError)
+  }
+
+  next()
+}
+
+function buildEntry (config) {
+  const isProd = /min\.js$/.test(config.dest)
+  return rollup.rollup(config).then(bundle => {
+    const code = bundle.generate(config).code
+    if (isProd) {
+      var minified = (config.banner ? config.banner + '\n' : '') + uglify.minify(code, {
+        fromString: true,
+        output: {
+          /* eslint-disable camelcase */
+          screw_ie8: true,
+          ascii_only: true
+          /* eslint-enable camelcase */
+        }
+      }).code
+      return write(config.dest, minified, true)
+    } else {
+      return write(config.dest, code)
+    }
+  })
+}
+
+function write (dest, code, zip) {
+  return new Promise((resolve, reject) => {
+    function report (extra) {
+      console.log(blue(path.relative(process.cwd(), dest)) + ' ' + getSize(code) + (extra || ''))
+      resolve()
+    }
+
+    fs.writeFile(dest, code, err => {
+      if (err) return reject(err)
+      if (zip) {
+        zlib.gzip(code, (err, zipped) => {
+          if (err) return reject(err)
+          report(' (gzipped: ' + getSize(zipped) + ')')
+        })
+      } else {
+        report()
+      }
+    })
+  })
+}
+
+function getSize (code) {
+  return (code.length / 1024).toFixed(2) + 'kb'
+}
+
+function logError (e) {
+  console.log(e)
+}
+
+function blue (str) {
+  return '\x1b[1m\x1b[34m' + str + '\x1b[39m\x1b[22m'
+}

+ 71 - 0
build/configs.js

@@ -0,0 +1,71 @@
+const path = require('path')
+const buble = require('rollup-plugin-buble')
+const replace = require('rollup-plugin-replace')
+const version = process.env.VERSION || require('../package.json').version
+const banner =
+`/**
+ * vuex v${version}
+ * (c) ${new Date().getFullYear()} Evan You
+ * @license MIT
+ */`
+
+const resolve = _path => path.resolve(__dirname, '../', _path)
+
+const configs = {
+  browserDev: {
+    entry: resolve('src/index.js'),
+    dest: resolve('dist/vuex.js'),
+    format: 'umd',
+    env: 'development'
+  },
+  browserProd: {
+    entry: resolve('src/index.js'),
+    dest: resolve('dist/vuex.min.js'),
+    format: 'umd',
+    env: 'production'
+  },
+  commonjs: {
+    entry: resolve('src/index.js'),
+    dest: resolve('dist/vuex.common.js'),
+    format: 'cjs'
+  },
+  esm: {
+    entry: resolve('src/index.esm.js'),
+    dest: resolve('dist/vuex.esm.js'),
+    format: 'es'
+  }
+}
+
+function genConfig (opts) {
+  const config = {
+    entry: opts.entry,
+    dest: opts.dest,
+    format: opts.format,
+    banner,
+    moduleName: 'Vuex',
+    plugins: [
+      replace({
+        __VERSION__: version
+      }),
+      buble()
+    ]
+  }
+
+  if (opts.env) {
+    config.plugins.unshift(replace({
+      'process.env.NODE_ENV': JSON.stringify(opts.env)
+    }))
+  }
+
+  return config
+}
+
+function mapValues (obj, fn) {
+  const res = {}
+  Object.keys(obj).forEach(key => {
+    res[key] = fn(obj[key], key)
+  })
+  return res
+}
+
+module.exports = mapValues(configs, genConfig)

+ 0 - 20
build/rollup.config.js

@@ -1,20 +0,0 @@
-const buble = require('rollup-plugin-buble')
-const replace = require('rollup-plugin-replace')
-const version = process.env.VERSION || require('../package.json').version
-
-module.exports = {
-  entry: process.env.ESM ? 'src/index.esm.js' : 'src/index.js',
-  dest: process.env.ESM ? 'dist/vuex.esm.js' : 'dist/vuex.js',
-  format: process.env.ESM ? 'es' : 'umd',
-  moduleName: 'Vuex',
-  plugins: [
-    replace({ __VERSION__: version }),
-    buble()
-  ],
-  banner:
-`/**
- * vuex v${version}
- * (c) ${new Date().getFullYear()} Evan You
- * @license MIT
- */`
-}

+ 1 - 0
build/rollup.dev.config.js

@@ -0,0 +1 @@
+module.exports = require('./configs').commonjs

+ 5 - 6
package.json

@@ -2,7 +2,7 @@
   "name": "vuex",
   "version": "2.3.1",
   "description": "state management for Vue.js",
-  "main": "dist/vuex.js",
+  "main": "dist/vuex.common.js",
   "module": "dist/vuex.esm.js",
   "unpkg": "dist/vuex.js",
   "typings": "types/index.d.ts",
@@ -15,14 +15,13 @@
   ],
   "scripts": {
     "dev": "node examples/server.js",
-    "dev:dist": "rollup -wm -c build/rollup.config.js",
-    "build": "npm run build:main && npm run build:esm && npm run build:logger",
-    "build:main": "rollup -c build/rollup.config.js && uglifyjs dist/vuex.js -cm --comments -o dist/vuex.min.js",
-    "build:esm": "rollup -c build/rollup.config.js --environment ESM",
+    "dev:dist": "rollup -wm -c build/rollup.dev.config.js",
+    "build": "npm run build:main && npm run build:logger",
+    "build:main": "node build/build.main.js",
     "build:logger": "rollup -c build/rollup.logger.config.js",
     "lint": "eslint src test",
     "test": "npm run lint && npm run test:types && npm run test:unit && npm run test:e2e",
-    "test:unit": "rollup -c build/rollup.config.js && jasmine JASMINE_CONFIG_PATH=test/unit/jasmine.json",
+    "test:unit": "rollup -c build/rollup.dev.config.js && jasmine JASMINE_CONFIG_PATH=test/unit/jasmine.json",
     "test:e2e": "node test/e2e/runner.js",
     "test:types": "tsc -p types/test",
     "release": "bash build/release.sh",