"private": true,
"version": "4.0.0-alpha.0",
"main": "src/index.ts",
- "browser": "dist/vue-router.esm.js",
+ "browser": "dist/vue-router.browser.esm.js",
"unpkg": "dist/vue-router.js",
"module": "dist/vue-router.esm.js",
"types": "dist/index.d.ts",
"rollup-plugin-alias": "^1.5.2",
"rollup-plugin-commonjs": "^10.0.1",
"rollup-plugin-node-resolve": "^5.1.0",
+ "rollup-plugin-replace": "^2.2.0",
"rollup-plugin-terser": "^5.0.0",
"rollup-plugin-typescript2": "^0.21.2",
"ts-jest": "^24.0.2",
+import replace from 'rollup-plugin-replace'
import resolve from 'rollup-plugin-node-resolve'
import commonjs from 'rollup-plugin-commonjs'
import ts from 'rollup-plugin-typescript2'
import pkg from './package.json'
import path from 'path'
-export default [
- // browser-friendly UMD build
+const banner = `/*!
+ * ${pkg.name} v${pkg.version}
+ * (c) ${new Date().getFullYear()} Eduardo San Martin Morote
+ * @license MIT
+ */`
+
+const exportName = 'VueRouter'
+
+function createEntry(
{
- input: 'src/entries/iife.ts',
- output: {
- name: 'VueRouter',
- file: pkg.unpkg,
- format: 'iife',
- },
+ format, // Rollup format (iife, umd, cjs, es)
+ external, // Rollup external option
+ input = 'src/index.ts', // entry point
+ env = 'development', // NODE_ENV variable
+ minify = false,
+ isBrowser = false, // produce a browser module version or not
+ } = {
+ input: 'src/index.ts',
+ env: 'development',
+ minify: false,
+ isBrowser: false,
+ }
+) {
+ // force production mode when minifying
+ if (minify) env = 'production'
+
+ const config = {
+ input,
plugins: [
+ replace({
+ __VERSION__: pkg.version,
+ 'process.env.NODE_ENV': `'${env}'`,
+ }),
alias({
resolve: ['ts'],
consola: path.resolve(__dirname, './src/consola.ts'),
}),
- resolve(), // so Rollup can find `ms`
- commonjs(), // so Rollup can convert `ms` to an ES module
- ts(), // so Rollup can convert TypeScript to JavaScript
],
- },
-
- // CommonJS and ESM builds
- {
- input: 'src/entries/iife.ts',
output: {
- name: 'VueRouter',
- file: 'dist/vue-router.min.js',
- format: 'iife',
+ banner,
+ file: 'dist/vue-router.other.js',
+ format,
},
- plugins: [
- alias({
- resolve: ['ts'],
- consola: path.resolve(__dirname, './src/consola.ts'),
- }),
- resolve(), // so Rollup can find `ms`
- commonjs(), // so Rollup can convert `ms` to an ES module
- ts(), // so Rollup can convert TypeScript to JavaScript
+ }
+
+ if (format === 'iife') {
+ config.input = 'src/entries/iife.ts'
+ config.output.file = pkg.unpkg
+ config.output.name = exportName
+ } else if (format === 'es') {
+ config.output.file = isBrowser ? pkg.browser : pkg.module
+ } else if (format === 'cjs') {
+ config.output.file = 'dist/vue-router.cjs.js'
+ }
+
+ if (!external) {
+ config.plugins.push(resolve(), commonjs())
+ } else {
+ config.external = external
+ }
+
+ config.plugins.push(
+ ts({
+ // only check once, during the es version with browser (it includes external libs)
+ check: format === 'es' && isBrowser && !minify,
+ tsconfigOverride: {
+ compilerOptions: {
+ // same for d.ts files
+ declaration: format === 'es' && isBrowser && !minify,
+ target: format === 'iife' || format === 'cjs' ? 'es3' : 'esnext',
+ },
+ },
+ })
+ )
+
+ if (minify) {
+ config.plugins.push(
terser({
- module: false,
- }),
- ],
- },
+ module: format === 'es',
+ output: {
+ preamble: banner,
+ },
+ })
+ )
+ config.output.file = config.output.file.replace(/\.js$/i, '.min.js')
+ }
- {
- input: 'src/index.ts',
- external: ['path-to-regexp'],
- plugins: [
- alias({
- resolve: ['ts'],
- consola: path.resolve(__dirname, './src/consola.ts'),
- }),
- ts(), // so Rollup can convert TypeScript to JavaScript
- ],
- output: [
- { file: 'dist/vue-router.cjs.js', format: 'cjs' },
- { file: pkg.module, format: 'es' },
- ],
- },
+ return config
+}
+
+export default [
+ // browser-friendly UMD build
+ createEntry({ format: 'iife' }),
+ createEntry({ format: 'iife', minify: true }),
+ createEntry({ format: 'cjs', external: ['path-to-regexp'] }),
+ createEntry({ format: 'es', external: ['path-to-regexp'] }),
+ createEntry({ format: 'es', isBrowser: true }),
+ createEntry({ format: 'es', isBrowser: true, minify: true }),
]
-import { Router as BaseRouter, plugin, HTML5History } from '../index'
-import { RouterOptions } from '../router'
-import { VueConstructor } from 'vue'
-
-export default class VueRouter extends BaseRouter {
- static install = plugin
- static version = '__VERSION__'
-
- // TODO: handle mode in a retro compatible way
- constructor(options: RouterOptions & { mode: 'string' }) {
- super({
- history: new HTML5History(),
- ...options,
- })
- }
-}
-
-declare global {
- interface Window {
- Vue?: VueConstructor
- }
-}
-
-if (window.Vue) window.Vue.use(VueRouter)
+import VueRouter from // Router
+// plugin,
+// HTML5History,
+'../index'
+
+// declare module '../index' {
+// interface BackwardsCompatibleRouter {
+// Router: BaseRouter
+// install: typeof plugin
+// HTML5History: HTML5History
+// }
+// }
+
+export default VueRouter
-import { Router } from './router'
+import { Router, RouterOptions } from './router'
import { HTML5History } from './history/html5'
-import { PluginFunction } from 'vue'
+import { PluginFunction, VueConstructor } from 'vue'
import View from './components/View'
import Link from './components/Link'
}
export { Router, HTML5History, plugin }
+
+export default class VueRouter extends Router {
+ static install = plugin
+ static version = '__VERSION__'
+
+ // TODO: handle mode in a retro compatible way
+ constructor(options: RouterOptions & { mode: 'string' }) {
+ super({
+ history: new HTML5History(),
+ ...options,
+ })
+ }
+}
+
+declare global {
+ interface Window {
+ Vue?: VueConstructor
+ }
+}
+
+if (window.Vue) window.Vue.use(VueRouter)