├── .babelrc ├── .editorconfig ├── .gitignore ├── .postcssrc.js ├── README.md ├── build ├── build.js ├── check-versions.js ├── logo.png ├── utils.js ├── vue-loader.conf.js ├── webpack.base.conf.js ├── webpack.dev.conf.js └── webpack.prod.conf.js ├── config ├── dev.env.js ├── index.js ├── multipage.js ├── multipage.project.js ├── prod.env.js └── test.env.js ├── dist ├── admin │ ├── favicon.ico │ ├── index.html │ └── static │ │ ├── css │ │ ├── index.3a947c1c1f207832148c696e78c1f1bd.css │ │ └── index.3a947c1c1f207832148c696e78c1f1bd.css.map │ │ └── js │ │ ├── index.3675151582d13b8e0c7e.js │ │ ├── index.3675151582d13b8e0c7e.js.map │ │ ├── manifest.2ae2e69a05c33dfc65f8.js │ │ ├── manifest.2ae2e69a05c33dfc65f8.js.map │ │ ├── vendor.7fed9fa7b7ba482410b7.js │ │ └── vendor.7fed9fa7b7ba482410b7.js.map └── master │ ├── favicon.ico │ ├── index.html │ └── static │ ├── css │ ├── index.7cb8a531774c9910737734e1c15db140.css │ └── index.7cb8a531774c9910737734e1c15db140.css.map │ └── js │ ├── index.0f86190d29b252e0535a.js │ ├── index.0f86190d29b252e0535a.js.map │ ├── manifest.2ae2e69a05c33dfc65f8.js │ ├── manifest.2ae2e69a05c33dfc65f8.js.map │ ├── vendor.7fed9fa7b7ba482410b7.js │ └── vendor.7fed9fa7b7ba482410b7.js.map ├── package.json ├── src ├── admin │ ├── components │ │ └── HelloWorld.vue │ ├── config │ │ └── index.js │ ├── pages │ │ └── index │ │ │ ├── App.vue │ │ │ ├── favicon.ico │ │ │ ├── index.html │ │ │ └── index.js │ └── router │ │ └── index.js ├── global │ └── assets │ │ └── logo.png └── master │ ├── components │ └── HelloWorld.vue │ ├── config │ └── index.js │ ├── pages │ └── index │ │ ├── App.vue │ │ ├── favicon.ico │ │ ├── index.html │ │ └── index.js │ └── router │ └── index.js ├── static └── .gitkeep └── test └── unit ├── .eslintrc ├── jest.conf.js ├── setup.js └── specs └── HelloWorld.spec.js /.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": [ 3 | ["env", { 4 | "modules": false, 5 | "targets": { 6 | "browsers": ["> 1%", "last 2 versions", "not ie <= 8"] 7 | } 8 | }], 9 | "stage-2" 10 | ], 11 | "plugins": ["transform-vue-jsx", "transform-runtime"], 12 | "env": { 13 | "test": { 14 | "presets": ["env", "stage-2"], 15 | "plugins": ["transform-vue-jsx", "transform-es2015-modules-commonjs", "dynamic-import-node"] 16 | } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | charset = utf-8 5 | indent_style = space 6 | indent_size = 2 7 | end_of_line = lf 8 | insert_final_newline = true 9 | trim_trailing_whitespace = true 10 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules/ 3 | /dist/ 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | /test/unit/coverage/ 8 | 9 | # Editor directories and files 10 | .idea 11 | .vscode 12 | *.suo 13 | *.ntvs* 14 | *.njsproj 15 | *.sln 16 | /.history/ 17 | package-lock.json -------------------------------------------------------------------------------- /.postcssrc.js: -------------------------------------------------------------------------------- 1 | // https://github.com/michael-ciniawsky/postcss-load-config 2 | 3 | module.exports = { 4 | "plugins": { 5 | "postcss-import": {}, 6 | "postcss-url": {}, 7 | // to edit target browsers: use "browserslist" field in package.json 8 | "autoprefixer": {} 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # vue-multi-project 2 | 布置一套vue+webpack,实现多个项目。 3 | 4 | ### 欢迎 Star ,您的Star是对我的鼓励! 5 | 6 | ### 前提 7 | 目前工作出现一个问题,多个项目均使用vue+webpack,并且项目之间有很多的组件或者方法都是相同的(粘贴复制),整体布局基本一样(只是主题颜色有些许不同)。感觉这样子后期维护繁杂,同一个问题需要修改很多遍。于是,在研究两天之后,生成了一套新的项目结构,基本改善了上述问题。 8 | 9 | ### 工程结构 10 | ``` 11 | The files tree is: 12 | ================= 13 | |__ build 14 | |__ build.js 15 | |__ check-versions.js 16 | |__ logo.png 17 | |__ utils.js 18 | |__ vue-loader.conf.js 19 | |__ webpack.base.conf.js 20 | |__ webpack.dev.conf.js 21 | |__ webpack.prod.conf.js 22 | |__ config 23 | |__ dev.env.js 24 | |__ index.js 25 | |__ multipage.js 26 | |__ multipage.project.js 27 | |__ prod.env.js 28 | |__ test.env.js 29 | |__ dist 30 | |__ admin 31 | |__ favicon.ico 32 | |__ index.html 33 | |__ static 34 | |__ css 35 | |__ index.3a947c1c1f207832148c696e78c1f1bd.css 36 | |__ index.3a947c1c1f207832148c696e78c1f1bd.css.map 37 | |__ js 38 | |__ index.3675151582d13b8e0c7e.js 39 | |__ index.3675151582d13b8e0c7e.js.map 40 | |__ manifest.2ae2e69a05c33dfc65f8.js 41 | |__ manifest.2ae2e69a05c33dfc65f8.js.map 42 | |__ vendor.7fed9fa7b7ba482410b7.js 43 | |__ vendor.7fed9fa7b7ba482410b7.js.map 44 | |__ master 45 | |__ favicon.ico 46 | |__ index.html 47 | |__ static 48 | |__ css 49 | |__ index.7cb8a531774c9910737734e1c15db140.css 50 | |__ index.7cb8a531774c9910737734e1c15db140.css.map 51 | |__ js 52 | |__ index.0f86190d29b252e0535a.js 53 | |__ index.0f86190d29b252e0535a.js.map 54 | |__ manifest.2ae2e69a05c33dfc65f8.js 55 | |__ manifest.2ae2e69a05c33dfc65f8.js.map 56 | |__ vendor.7fed9fa7b7ba482410b7.js 57 | |__ vendor.7fed9fa7b7ba482410b7.js.map 58 | |__ node_modules 59 | |__ src 60 | |__ admin 61 | |__ components 62 | |__ HelloWorld.vue 63 | |__ config 64 | |__ index.js 65 | |__ pages 66 | |__ index 67 | |__ App.vue 68 | |__ favicon.ico 69 | |__ index.html 70 | |__ index.js 71 | |__ router 72 | |__ index.js 73 | |__ global 74 | |__ assets 75 | |__ logo.png 76 | |__ master 77 | |__ components 78 | |__ HelloWorld.vue 79 | |__ config 80 | |__ index.js 81 | |__ pages 82 | |__ index 83 | |__ App.vue 84 | |__ favicon.ico 85 | |__ index.html 86 | |__ index.js 87 | |__ router 88 | |__ index.js 89 | |__ static 90 | |__ .gitkeep 91 | |__ test 92 | |__ .babelrc 93 | |__ .editorconfig 94 | |__ .gitignore 95 | |__ .postcssrc.js 96 | |__ package-lock.json 97 | |__ package.json 98 | |__ README.md 99 | ``` 100 | --- 101 | ### 使用 102 | #### git clone https://github.com/augustVino/vue-multi-project.git 103 | #### cd vue-multi-project 104 | 105 | ``` bash 106 | # clone 107 | git clone https://github.com/augustVino/vue-multi-project.git 108 | 109 | cd vue-multi-project 110 | 111 | # install dependencies 112 | npm install 113 | 114 | # serve with hot reload at localhost:8080 115 | npm run dev 116 | 117 | # build for production with minification 118 | npm run build 119 | 120 | # run unit tests 121 | npm run unit 122 | 123 | # run all tests 124 | npm test 125 | ``` 126 | 127 | ### 实现过程 128 | > #### 1.首先进入项目根路径中的 config 文件夹,新增两个文件( multipage.js、multipage.project.js ),分别是配置多页面和多项目切换的。 129 | > #### 2.然后修改 config 文件夹下的 index.js 文件。 130 | > #### 3.修改 build 文件夹下的 webpack.base.conf.js 、webpack.dev.conf.js 、webpack.prod.conf.js 。 131 | 132 | ### 工程简介 133 | > #### 1.有两个项目(admin和master),src路径下的另一个文件夹 global 是存放一些项目公共文件(如组件或工具函数),此处存放的是vue官方的logo图片,两个项目都用到了。 134 | > #### 2. 每个项目中都有个 pages 文件夹,用来存放项目入口文件。 135 | > #### 3. 每个项目都有独自的 config 文件,文件内容: 136 | ``` bash 137 | 'use strict' 138 | module.exports = { 139 | name : 'admin', //文件夹名称 和最后打包后文件夹的名称 /src/admin/ 140 | } 141 | ``` 142 | > #### 4. 切换项目:在根目录的config文件夹找到multipage.project.js文件打开,,切换到对应的项目进行开发打包。打包后也会对应生成独立的文件夹。 143 | -------------------------------------------------------------------------------- /build/build.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | // 检查npm和node的版本 3 | require('./check-versions')() 4 | // 设置环境变量NODE_ENV的值是production 5 | process.env.NODE_ENV = 'production' 6 | // 终端的spinner 7 | const ora = require('ora') 8 | // node.js版本的rm -rf 9 | const rm = require('rimraf') 10 | // 引入path模块 11 | const path = require('path') 12 | // 引入显示终端颜色模块 13 | const chalk = require('chalk') 14 | // 引入webpack模块 15 | const webpack = require('webpack') 16 | // 引入基本的配置文件 17 | const config = require('../config') 18 | // 引入webpack在production环境下的配置文件 19 | const webpackConfig = require('./webpack.prod.conf') 20 | 21 | const spinner = ora('building for production...') 22 | spinner.start() 23 | 24 | // 删除打包目标目录下的文件 25 | rm(path.join(config.build.assetsRoot, config.build.assetsSubDirectory), err => { 26 | if (err) throw err 27 | // 进行打包 28 | webpack(webpackConfig, (err, stats) => { 29 | // 打包完成 30 | spinner.stop() 31 | if (err) throw err 32 | // 输出打包的状态 33 | process.stdout.write(stats.toString({ 34 | colors: true, 35 | modules: false, 36 | children: false, // If you are using ts-loader, setting this to true will make TypeScript errors show up during build. 37 | chunks: false, 38 | chunkModules: false 39 | }) + '\n\n') 40 | 41 | // 如果打包出现错误 42 | if (stats.hasErrors()) { 43 | console.log(chalk.red(' Build failed with errors.\n')) 44 | process.exit(1) 45 | } 46 | 47 | // 打包完成 48 | console.log(chalk.cyan(' Build complete.\n')) 49 | console.log(chalk.yellow( 50 | ' Tip: built files are meant to be served over an HTTP server.\n' + 51 | ' Opening index.html over file:// won\'t work.\n' 52 | )) 53 | }) 54 | }) 55 | -------------------------------------------------------------------------------- /build/check-versions.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | // 在终端为不同字体显示不同的风格 3 | const chalk = require('chalk') 4 | // 解析npm包的version 5 | const semver = require('semver') 6 | // 引入package.json文件 7 | const packageConfig = require('../package.json') 8 | // node版本的uninx shell命令 9 | const shell = require('shelljs') 10 | 11 | // 执行命令的函数 12 | function exec (cmd) { 13 | return require('child_process').execSync(cmd).toString().trim() 14 | } 15 | 16 | const versionRequirements = [ 17 | { 18 | name: 'node', 19 | // node的版本 20 | // process.version就是node的版本 21 | // semver.clean('v8.8.0') => 8.8.0 22 | currentVersion: semver.clean(process.version), 23 | // package.json中定义的node版本的范围 24 | versionRequirement: packageConfig.engines.node 25 | } 26 | ] 27 | 28 | // 相当于 which npm 29 | if (shell.which('npm')) { 30 | // 如果npm命令存在的话 31 | versionRequirements.push({ 32 | name: 'npm', 33 | // 检查npm的版本 => 5.4.2 34 | currentVersion: exec('npm --version'), 35 | // package.json中定义的npm版本 36 | versionRequirement: packageConfig.engines.npm 37 | }) 38 | } 39 | 40 | module.exports = function () { 41 | const warnings = [] 42 | 43 | for (let i = 0; i < versionRequirements.length; i++) { 44 | const mod = versionRequirements[i] 45 | 46 | // semver.satisfies()进行版本之间的比较 47 | if (!semver.satisfies(mod.currentVersion, mod.versionRequirement)) { 48 | // 如果现有的npm或者node的版本比定义的版本低,则生成一段警告 49 | warnings.push(mod.name + ': ' + 50 | chalk.red(mod.currentVersion) + ' should be ' + 51 | chalk.green(mod.versionRequirement) 52 | ) 53 | } 54 | } 55 | 56 | if (warnings.length) { 57 | console.log('') 58 | console.log(chalk.yellow('To use this template, you must update following to modules:')) 59 | console.log() 60 | 61 | for (let i = 0; i < warnings.length; i++) { 62 | const warning = warnings[i] 63 | console.log(' ' + warning) 64 | } 65 | 66 | console.log() 67 | // 退出程序 68 | process.exit(1) 69 | } 70 | } 71 | -------------------------------------------------------------------------------- /build/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/augustVino/vue-multi-project/05f96068f4ab59aeceaff6ca187a0fdd3587dfad/build/logo.png -------------------------------------------------------------------------------- /build/utils.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | // 引入node.js的path模块,用于操作路径 3 | const path = require('path') 4 | // 引入模板的配置文件,下面就需要去这个文件中看看有什么基本的配置 5 | const config = require('../config') 6 | // 提取指定文件的插件,比如把css文件提取到一个文件中去 7 | const ExtractTextPlugin = require('extract-text-webpack-plugin') 8 | // 加载package.json文件 9 | const packageConfig = require('../package.json') 10 | 11 | // 生成编译输出的二级目录 12 | exports.assetsPath = function (_path) { 13 | const assetsSubDirectory = process.env.NODE_ENV === 'production' 14 | ? config.build.assetsSubDirectory 15 | : config.dev.assetsSubDirectory 16 | // path.posix是path模块跨平台的实现(不同平台的路径表示是不一样的) 17 | return path.posix.join(assetsSubDirectory, _path) 18 | } 19 | // 为不同的css预处理器提供一个统一的生成方式,也就是统一处理各种css类型的打包问题 20 | // 这个是为在vue文件中的style中使用的css类型 21 | exports.cssLoaders = function (options) { 22 | options = options || {} 23 | // 打包css模块 24 | const cssLoader = { 25 | loader: 'css-loader', 26 | options: { 27 | sourceMap: options.sourceMap 28 | } 29 | } 30 | // 编译postcss模块 31 | const postcssLoader = { 32 | // 使用postcss-loader来打包postcss模块 33 | loader: 'postcss-loader', 34 | // 配置source map 35 | options: { 36 | sourceMap: options.sourceMap 37 | } 38 | } 39 | 40 | // 创建loader加载器字符串,结合extract text插件使用 41 | /** 42 | * 43 | * @param {loader的名称} loader 44 | * @param {loader对应的options配置对象} loaderOptions 45 | */ 46 | function generateLoaders (loader, loaderOptions) { 47 | // 通过usePostCSS 来标明是否使用了postcss 48 | const loaders = options.usePostCSS ? [cssLoader, postcssLoader] : [cssLoader] 49 | // 如果指定了具体的loader的名称 50 | if (loader) { 51 | // 向loaders的数组中添加该loader对应的加载器 52 | // 一个很重要的地方就是,一个数组中的loader加载器,是从右向左执行的。 53 | loaders.push({ 54 | // loader加载器的名称 55 | loader: loader + '-loader', 56 | // 对应的加载器的配置对象 57 | options: Object.assign({}, loaderOptions, { 58 | sourceMap: options.sourceMap 59 | }) 60 | }) 61 | } 62 | 63 | // 如果明确指定了需要提取静态文件,则使用 64 | // ExtractTextPlugin.extract({})来包裹我们的各种css处理器。 65 | if (options.extract) { 66 | return ExtractTextPlugin.extract({ 67 | use: loaders, 68 | // fallback这个选项我们可以这样理解 69 | // webpack默认会按照loaders中的加载器从右向左调用编译各种css类型文件。如果一切顺利,在loaders中的 70 | // 各个加载器运行结束之后就会把css文件导入到规定的文件中去,如果不顺利,则继续使用vue-style-loader来处理 71 | // css文件 72 | fallback: 'vue-style-loader' 73 | }) 74 | } else { 75 | // 如果没有提取行为,则最后再使用vue-style-loader处理css 76 | return ['vue-style-loader'].concat(loaders) 77 | } 78 | } 79 | 80 | // https://vue-loader.vuejs.org/en/configurations/extract-css.html 81 | return { 82 | // css-loader 83 | css: generateLoaders(), 84 | // postcss-loader 85 | postcss: generateLoaders(), 86 | // less-loader 87 | less: generateLoaders('less'), 88 | // sass-loader 后面的选项表明sass使用的是缩进的愈发 89 | sass: generateLoaders('sass', { indentedSyntax: true }), 90 | // scss-loader 91 | scss: generateLoaders('sass'), 92 | // stylus-loader stylus文件有两种后缀名.stylus和styl 93 | stylus: generateLoaders('stylus'), 94 | // stylus-loader 95 | styl: generateLoaders('stylus') 96 | } 97 | } 98 | 99 | // 使用这个函数,为那些独立的style文件创建加载器配置。 100 | exports.styleLoaders = function (options) { 101 | // 保存到加载器配置的变量 102 | const output = [] 103 | // 获取所有css文件类型的loaders 104 | const loaders = exports.cssLoaders(options) 105 | 106 | for (const extension in loaders) { 107 | const loader = loaders[extension] 108 | // 生成对应的loader配置 109 | output.push({ 110 | test: new RegExp('\\.' + extension + '$'), 111 | use: loader 112 | }) 113 | } 114 | 115 | return output 116 | } 117 | 118 | exports.createNotifierCallback = () => { 119 | // node-notifier是一个跨平台的包,以类似浏览器的通知的形式展示信息。 120 | const notifier = require('node-notifier') 121 | 122 | return (severity, errors) => { 123 | // 只展示错误的信息 124 | if (severity !== 'error') return 125 | 126 | const error = errors[0] 127 | const filename = error.file && error.file.split('!').pop() 128 | 129 | // 需要展示的错误信息的内容 130 | notifier.notify({ 131 | // 通知的标题 132 | title: packageConfig.name, 133 | // 通知的主体内容 134 | message: severity + ': ' + error.name, 135 | // 副标题 136 | subtitle: filename || '', 137 | // 通知展示的icon 138 | icon: path.join(__dirname, 'logo.png') 139 | }) 140 | } 141 | } 142 | -------------------------------------------------------------------------------- /build/vue-loader.conf.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | const utils = require('./utils') 3 | const config = require('../config') 4 | // 设置是不是生产环境 5 | const isProduction = process.env.NODE_ENV === 'production' 6 | // 根据不同的环境,引入不同的source map配置文件 7 | const sourceMapEnabled = isProduction 8 | ? config.build.productionSourceMap 9 | : config.dev.cssSourceMap 10 | 11 | module.exports = { 12 | // vue文件中的css loader配置 13 | loaders: utils.cssLoaders({ 14 | sourceMap: sourceMapEnabled, 15 | // 生产环境下就会把css文件抽取到一个独立的文件中 16 | extract: isProduction 17 | }), 18 | // css source map文件的配置 19 | cssSourceMap: sourceMapEnabled, 20 | // css source map文件缓存控制变量 21 | cacheBusting: config.dev.cacheBusting, 22 | transformToRequire: { 23 | video: ['src', 'poster'], 24 | source: 'src', 25 | img: 'src', 26 | image: 'xlink:href' 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /build/webpack.base.conf.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | const path = require('path') 3 | const utils = require('./utils') 4 | const config = require('../config') 5 | const vueLoaderConfig = require('./vue-loader.conf') 6 | 7 | const multipage = require('../config/multipage'); //多页 8 | 9 | // 生成相对于根目录的绝对路径 10 | function resolve (dir) { 11 | return path.join(__dirname, '..', dir) 12 | } 13 | 14 | 15 | 16 | // 下面就是webpack基本的配置信息(可以立即生成是开发环境和生产环境的公共的配置) 17 | module.exports = { 18 | // webpack解析文件时候的根目录(如果把webpack.config.js放在了项目的根目录下面,这个配置可以省略) 19 | context: path.resolve(__dirname, '../'), 20 | // 指定项目的入口文件(用multipage.getEntries()方法替换原有设置) 21 | // entry: { 22 | // app: './src/main.js' 23 | // }, 24 | entry : multipage.getEntries(), 25 | // 项目的输出配置 26 | output: { 27 | // 项目build的时候,生成的文件的存放路径(这里的路径是../dist) 28 | path: config.build.assetsRoot, 29 | // 生成文件的名称 30 | filename: '[name].js', 31 | // 输出解析文件的目录,url相对于HTML页面(生成的html文件中,css和js等静态文件的url前缀) 32 | publicPath: process.env.NODE_ENV === 'production' 33 | ? config.build.assetsPublicPath 34 | : config.dev.assetsPublicPath 35 | }, 36 | // 配置模块解析时候的一些选项 37 | resolve: { 38 | // 指定哪些类型的文件可以引用的时候省略后缀名 39 | extensions: ['.js', '.vue', '.json'], 40 | // 别名,在引入文件的时候可以使用 41 | alias: { 42 | 'vue$': 'vue/dist/vue.esm.js', 43 | // 可以在引入文件的时候使用@符号引入src文件夹中的文件 44 | '@': resolve('src/'+multipage.project.name), //当前项目 src/项目名称/ 45 | '@g': resolve('src/global'), //当前项目 src/global/ 全局组件 46 | '@cs': resolve('src/'+multipage.project.name+'/components'), //组件路径简写 47 | } 48 | }, 49 | 50 | // 下面是针对具体的模块进行的具体的配置 51 | // 下面的配置语法采用的是 version >= @2 的版本 52 | module: { 53 | // rules是一个数组,其中每一个元素都是一个对象,这个对象是针对具体类型的文件进行的配置 54 | rules: [ 55 | // .vue文件的配置 56 | { 57 | // 这个属性是一个正则表达式,用于匹配文件。这里匹配的是.vue文件 58 | test: /\.vue$/, 59 | // 指定该种类型文件的加载器名称 60 | loader: 'vue-loader', 61 | // 针对此加载器的具体配置 62 | // 针对前面的分析,这个配置对象中包含了各种css类型文件的配置,css source map的配置 以及一些transform的配置 63 | options: vueLoaderConfig 64 | }, 65 | // .js文件的配置 66 | { 67 | test: /\.js$/, 68 | // js文件的处理主要使用的是babel-loader。在这里没有指定具体的编译规则,babel-loader会自动 69 | // 读取根目录下面的.babelrc中的babel配置用于编译js文件 70 | /** 71 | * { 72 | * // 使用的预设 73 | "presets": [ 74 | // babel-preset-env: 根据你所支持的环境自动决定具体类型的babel插件 75 | ["env", { 76 | // modules设置为false,不会转换module 77 | "modules": false 78 | }], 79 | // babel-preset-stage-2: 可以使用所有>=stage2语法 80 | "stage-2" 81 | ], 82 | // 使用的插件 83 | // babel-plugin-transform-runtime: 只会对es6的语法进行转换而不会对新的api进行转换 84 | // 如果需要支持新的api,请引入babel-polyfill 85 | "plugins": ["transform-runtime"] 86 | } 87 | */ 88 | loader: 'babel-loader', 89 | // 指定需要进行编译的文件的路径 90 | // 这里表示只对src和test文件夹中的文件进行编译 91 | include: [resolve('src'), resolve('test') ,resolve('node_modules/webpack-dev-server/client')] 92 | }, 93 | { 94 | // 对图片资源进行编译的配置 95 | // 指定文件的类型 96 | test: /\.(png|jpe?g|gif|svg)(\?.*)?$/, 97 | // 使用url-loader进行文件资源的编译 98 | loader: 'url-loader', 99 | // url-loader的配置选项 100 | options: { 101 | // 文件的大小小于10000字节(10kb)的时候会返回一个dataUrl 102 | limit: 10000, 103 | // 生成的文件的保存路径和后缀名称 104 | name: utils.assetsPath('img/[name].[hash:7].[ext]') 105 | } 106 | }, 107 | // 对视频文件进行打包编译 108 | { 109 | test: /\.(mp4|webm|ogg|mp3|wav|flac|aac)(\?.*)?$/, 110 | loader: 'url-loader', 111 | options: { 112 | limit: 10000, 113 | name: utils.assetsPath('media/[name].[hash:7].[ext]') 114 | } 115 | }, 116 | // 对字体文件进行打包编译 117 | { 118 | test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/, 119 | loader: 'url-loader', 120 | options: { 121 | limit: 10000, 122 | name: utils.assetsPath('fonts/[name].[hash:7].[ext]') 123 | } 124 | } 125 | ] 126 | }, 127 | // 这些选项用于配置polyfill或mock某些node.js全局变量和模块。 128 | // 这可以使最初为nodejs编写的代码可以在浏览器端运行 129 | node: { 130 | // 这个配置是一个对象,其中的每个属性都是nodejs全局变量或模块的名称 131 | // prevent webpack from injecting useless setImmediate polyfill because Vue 132 | // source contains it (although only uses it if it's native). 133 | // false表示什么都不提供。如果获取此对象的代码,可能会因为获取不到此对象而触发ReferenceError错误 134 | setImmediate: false, 135 | // prevent webpack from injecting mocks to Node native modules 136 | // that does not make sense for the client 137 | // 设置成empty则表示提供一个空对象 138 | dgram: 'empty', 139 | fs: 'empty', 140 | net: 'empty', 141 | tls: 'empty', 142 | child_process: 'empty' 143 | } 144 | } 145 | -------------------------------------------------------------------------------- /build/webpack.dev.conf.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | const path = require('path') 3 | // 首先引入的是一些工具方法,下面我们就需要去util文件种看一下有哪些对应的工具方法 4 | const utils = require('./utils') 5 | // 引入webpack模块 6 | const webpack = require('webpack') 7 | // 引入配置文件 8 | // 这个配置文件中包含了一些dev和production环境的基本配置 9 | const config = require('../config') 10 | // 引入webpack-merge模块。这个模块用于把多个webpack配置合并成一个配置,后面的配置会覆盖前面的配置。 11 | const merge = require('webpack-merge') 12 | // 引入webpack的基本设置,这个设置文件包含了开发环境和生产环境的一些公共配置 13 | const baseWebpackConfig = require('./webpack.base.conf') 14 | // 15 | const CopyWebpackPlugin = require('copy-webpack-plugin') 16 | 17 | // 用于生成html文件的插件 18 | const HtmlWebpackPlugin = require('html-webpack-plugin') 19 | // 这个插件能够更好的在终端看到webpack运行时的错误和警告等信息。可以提升开发体验。 20 | const FriendlyErrorsPlugin = require('friendly-errors-webpack-plugin') 21 | // 查找一个未使用的端口 22 | const portfinder = require('portfinder') 23 | 24 | //新增多页配置 25 | const multipage = require('../config/multipage'); 26 | 27 | 28 | function resolve (dir) { 29 | return path.join(__dirname, '..', dir) 30 | } 31 | 32 | // 获取host环境变量,用于配置开发环境域名 33 | const HOST = process.env.HOST 34 | // 获取post环境变量,用于配置开发环境时候的端口号 35 | const PORT = process.env.PORT && Number(process.env.PORT) 36 | 37 | // 开发环境的完整的配置文件, 38 | const devWebpackConfig = merge(baseWebpackConfig, { 39 | module: { 40 | // 为那些独立的css类型文件添加loader配置(没有写在vue文件的style标签中的样式) 41 | rules: utils.styleLoaders({ sourceMap: config.dev.cssSourceMap, usePostCSS: true }) 42 | }, 43 | // 开发环境使用'eval-source-map'模式的source map 44 | // 因为速度快 45 | devtool: config.dev.devtool, 46 | 47 | // these devServer options should be customized in /config/index.js 48 | // 下面是对webpack-dev-server选项的基本配置,这些配置信息,我们可以在/config/index.js 49 | // 文件中进行自定义配置。 50 | devServer: { 51 | // 用于配置在开发工具的控制台中显示的日志级别 52 | // 注意这个不是对bundle的错误和警告的配置,而是对它生成之前的消息的配置 53 | clientLogLevel: 'warning', 54 | // 表示当使用html5的history api的时候,任意的404响应都需要被替代为index.html 55 | // historyApiFallback: true, 56 | historyApiFallback: { 57 | // rewrites: [ 58 | // { from: /.*/, to: path.posix.join(config.dev.assetsPublicPath, 'index.html') }, 59 | // ], 60 | // 此处替换为multipage.getHistoryRewrites()方法 61 | rewrites : multipage.getHistoryRewrites() 62 | }, 63 | // 启用webpack的热替换特性 64 | hot: true, 65 | // 一切服务都需要使用gzip压缩 66 | // 可以在js,css等文件的response header中发现有Content-Encoding:gzip响应头 67 | compress: true, 68 | contentBase: false, // since we use CopyWebpackPlugin. 69 | // 指定使用一个 host。默认是 localhost 70 | // 如果希望服务器外部可以访问(通过我们电脑的ip地址和端口号访问我们的应用) 71 | // 可以指定0.0.0.0 72 | host: HOST || config.dev.host, 73 | // 指定要监听请求的端口号 74 | port: PORT || config.dev.port, 75 | // 是否自动打开浏览器 76 | open: config.dev.autoOpenBrowser, 77 | // 当编译出现错误的时候,是否希望在浏览器中展示一个全屏的蒙层来展示错误信息 78 | overlay: config.dev.errorOverlay 79 | // 表示只显示错误信息而不显示警告信息 80 | // 如果两者都希望显示,则把这两项都设置为true 81 | ? { warnings: false, errors: true } 82 | // 设置为false则表示啥都不显示 83 | : false, 84 | // 指定webpack-dev-server的根目录,这个目录下的所有的文件都是能直接通过浏览器访问的 85 | // 推荐和output.publicPath设置为一致 86 | publicPath: config.dev.assetsPublicPath, 87 | // 配置代理,这样我们就可以跨域访问某些接口 88 | // 我们访问的接口,如果符合这个选项的配置,就会通过代理服务器转发我们的请求 89 | proxy: config.dev.proxyTable, 90 | // 启用 quiet 后,除了初始启动信息之外的任何内容都不会被打印到控制台。这也意味着来自 webpack 的错误或警告在控制台不可见。 91 | quiet: true, // necessary for FriendlyErrorsPlugin 92 | // 与监视文件相关的控制选项。 93 | watchOptions: { 94 | // 如果这个选项为true,会以轮询的方式检查我们的文件的变动,效率不好 95 | poll: config.dev.poll, 96 | } 97 | }, 98 | plugins: [ 99 | // 创建一个在编译时可以配置的全局变量 100 | new webpack.DefinePlugin({ 101 | 'process.env': require('../config/dev.env') 102 | }), 103 | // 启用热替换模块 104 | // 记住,我们永远不要再生产环境中使用hmr 105 | new webpack.HotModuleReplacementPlugin(), 106 | // 这个插件的主要作用就是在热加载的时候直接返回更新文件的名称,而不是文件的id 107 | new webpack.NamedModulesPlugin(), // HMR shows correct file names in console on update. 108 | // 使用这个插件可以在编译出错的时候来跳过输出阶段,这样可以确保输出资源不会包含错误。 109 | new webpack.NoEmitOnErrorsPlugin(), 110 | // 这个插件主要是生成一个html文件 111 | // new HtmlWebpackPlugin({ 112 | // // 生成的html文件的名称 113 | // filename: 'index.html', 114 | // // 使用的模板的名称 115 | // template: 'index.html', 116 | // // 将所有的静态文件都插入到body文件的末尾 117 | // inject: true 118 | // }), 119 | // copy custom static assets 120 | new CopyWebpackPlugin([ 121 | { 122 | from: path.resolve(__dirname, '../static'), 123 | to: config.dev.assetsSubDirectory, 124 | ignore: ['.*'] 125 | } 126 | ]) 127 | ] 128 | }) 129 | 130 | module.exports = new Promise((resolve, reject) => { 131 | portfinder.basePort = process.env.PORT || config.dev.port 132 | portfinder.getPort((err, port) => { 133 | if (err) { 134 | reject(err) 135 | } else { 136 | // publish the new Port, necessary for e2e tests 137 | process.env.PORT = port 138 | // add port to devServer config 139 | devWebpackConfig.devServer.port = port 140 | 141 | // Add FriendlyErrorsPlugin 142 | devWebpackConfig.plugins.push(new FriendlyErrorsPlugin({ 143 | compilationSuccessInfo: { 144 | messages: [`Your application is running here: http://${devWebpackConfig.devServer.host}:${port}`], 145 | }, 146 | onErrors: config.dev.notifyOnErrors 147 | ? utils.createNotifierCallback() 148 | : undefined 149 | })) 150 | 151 | resolve(devWebpackConfig) 152 | } 153 | }) 154 | }) 155 | 156 | 157 | // HtmlWebpackPlugin 替换HtmlWebpackPlugin方法 158 | var devHtmlList = multipage.getDevHtmlList(); 159 | devHtmlList.forEach(function(item){ 160 | devWebpackConfig.plugins.push(item) 161 | }) -------------------------------------------------------------------------------- /build/webpack.prod.conf.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | 3 | // 引入path模块 4 | const path = require('path') 5 | // 引入工具方法 6 | const utils = require('./utils') 7 | // 引入webpack模块 8 | const webpack = require('webpack') 9 | // 引入基本的配置 10 | const config = require('../config') 11 | // 引入webpack-merge模块 12 | const merge = require('webpack-merge') 13 | // 引入开发环境和生产环境公共的配置 14 | const baseWebpackConfig = require('./webpack.base.conf') 15 | // 引入copy-webpack-plugin模块 16 | // 这个模块主要用于在webpack中拷贝文件和文件夹 17 | const CopyWebpackPlugin = require('copy-webpack-plugin') 18 | // 引入html-webpack-plugin插件 19 | // 这个插件主要是用于基于模版生成html文件的 20 | const HtmlWebpackPlugin = require('html-webpack-plugin') 21 | // 引入extract-text-webpack-plugin插件 22 | // 这个插件主要是用于将入口中所有的chunk,移到独立的分离的css文件中 23 | const ExtractTextPlugin = require('extract-text-webpack-plugin') 24 | // 引入optimize-css-assets-webpack-plugin插件 25 | // 这个插件主要是用于压缩css模块的 26 | const OptimizeCSSPlugin = require('optimize-css-assets-webpack-plugin') 27 | // 引入uglifyjs-webpack-plugin插件 28 | // 这个插件主要是用于压缩js文件的 29 | const UglifyJsPlugin = require('uglifyjs-webpack-plugin') 30 | // 新增多页配置 31 | const multipage = require('../config/multipage'); //多页 32 | 33 | function resolve (dir) { 34 | return path.join(__dirname, '..', dir) 35 | } 36 | // 引入用于生产环境的一些基本变量 37 | const env = process.env.NODE_ENV === 'testing' 38 | ? require('../config/test.env') 39 | : require('../config/prod.env') 40 | 41 | // 合并公共配置和生产环境独有的配置并返回一个用于生产环境的webpack配置文件 42 | const webpackConfig = merge(baseWebpackConfig, { 43 | // 用于生产环境的一些loader配置 44 | module: { 45 | rules: utils.styleLoaders({ 46 | sourceMap: config.build.productionSourceMap, 47 | // 在生产环境中使用extract选项,这样就会把thunk中的css代码抽离到一份独立的css文件中去 48 | extract: true, 49 | usePostCSS: true 50 | }) 51 | }, 52 | // 配置生产环境中使用的source map的形式。在这里,生产环境使用的是#source map的形式 53 | devtool: config.build.productionSourceMap ? config.build.devtool : false, 54 | output: { 55 | // build所产生的文件的存放的文件夹地址 56 | path: config.build.assetsRoot, 57 | // build之后的文件的名称 58 | // 这里[name]和[chunkhash]都是占位符 59 | // 其中[name]指的就是模块的名称 60 | // [chunkhash]chunk内容的hash字符串,长度为20 61 | filename: utils.assetsPath('js/[name].[chunkhash].js'), 62 | // [id]也是一个占位符,表示的是模块标识符(module identifier) 63 | chunkFilename: utils.assetsPath('js/[id].[chunkhash].js') 64 | }, 65 | plugins: [ 66 | // http://vuejs.github.io/vue-loader/en/workflow/production.html 67 | new webpack.DefinePlugin({ 68 | 'process.env': env 69 | }), 70 | // 压缩javascript的插件 71 | new UglifyJsPlugin({ 72 | // 压缩js的时候的一些基本配置 73 | uglifyOptions: { 74 | // 配置压缩的行为 75 | compress: { 76 | // 在删除未使用的变量等时,显示警告信息,默认就是false 77 | warnings: false 78 | } 79 | }, 80 | // 使用 source map 将错误信息的位置映射到模块(这会减慢编译的速度) 81 | // 而且这里不能使用cheap-source-map 82 | sourceMap: config.build.productionSourceMap, 83 | // 使用多进程并行运行和文件缓存来提高构建速度 84 | parallel: true 85 | }), 86 | // 提取css文件到一个独立的文件中去 87 | new ExtractTextPlugin({ 88 | // 提取之后css文件存放的地方 89 | // 其中[name]和[contenthash]都是占位符 90 | // [name]就是指模块的名称 91 | // [contenthash]根据提取文件的内容生成的 hash 92 | filename: utils.assetsPath('css/[name].[contenthash].css'), 93 | 94 | // 从所有额外的 chunk(additional chunk) 提取css内容 95 | // (默认情况下,它仅从初始chunk(initial chunk) 中提取) 96 | // 当使用 CommonsChunkPlugin 并且在公共 chunk 中有提取的 chunk(来自ExtractTextPlugin.extract)时 97 | // 这个选项需要设置为true 98 | allChunks: true, 99 | }), 100 | // 使用这个插件压缩css,主要是因为,对于不同组件中相同的css可以剔除一部分 101 | new OptimizeCSSPlugin({ 102 | // 这个选项的所有配置都会传递给cssProcessor 103 | // cssProcessor使用这些选项决定压缩的行为 104 | cssProcessorOptions: config.build.productionSourceMap 105 | ? { safe: true, map: { inline: false } } 106 | : { safe: true } 107 | }), 108 | // 创建一个html文件 109 | // new HtmlWebpackPlugin({ 110 | // // 生成的文件的名称 111 | // filename: config.build.index, 112 | // // 使用的模板的名称 113 | // template: 'index.html', 114 | // // 把script和link标签放在body底部 115 | // inject: true, 116 | // favicon: resolve('favicon.ico'), 117 | // title: '车联网管理平台', 118 | // // 配置html的压缩行为 119 | // minify: { 120 | // // 移除注释 121 | // removeComments: true, 122 | // // 去除空格和换行 123 | // collapseWhitespace: true, 124 | // // 尽可能移除属性中的引号和空属性 125 | // removeAttributeQuotes: true 126 | // // more options: 127 | // // https://github.com/kangax/html-minifier#options-quick-reference 128 | // }, 129 | // // 控制chunks的顺序,这里表示按照依赖关系进行排序 130 | // // 也可以是一个函数,自己定义排序规则 131 | // chunksSortMode: 'dependency' 132 | // }), 133 | // 根据模块的相对路径生成一个四位数的hash作为模块id 134 | new webpack.HashedModuleIdsPlugin(), 135 | // webpack2处理过的每一个模块都会使用一个函数进行包裹 136 | // 这样会带来一个问题:降低浏览器中JS执行效率,这主要是闭包函数降低了JS引擎解析速度。 137 | // webpack3中,通过下面这个插件就能够将一些有联系的模块, 138 | // 放到一个闭包函数里面去,通过减少闭包函数数量从而加快JS的执行速度。 139 | new webpack.optimize.ModuleConcatenationPlugin(), 140 | // 这个插件用于提取多入口chunk的公共模块 141 | // 通过将公共模块提取出来之后,最终合成的文件能够在最开始的时候加载一次 142 | // 然后缓存起来供后续使用,这会带来速度上的提升。 143 | new webpack.optimize.CommonsChunkPlugin({ 144 | // 这是 common chunk 的名称 145 | name: 'vendor', 146 | // 把所有从mnode_modules中引入的文件提取到vendor中 147 | minChunks (module) { 148 | // any required modules inside node_modules are extracted to vendor 149 | return ( 150 | module.resource && 151 | /\.js$/.test(module.resource) && 152 | module.resource.indexOf( 153 | path.join(__dirname, '../node_modules') 154 | ) === 0 155 | ) 156 | } 157 | }), 158 | // 为了将项目中的第三方依赖代码抽离出来,官方文档上推荐使用这个插件,当我们在项目里实际使用之后, 159 | // 发现一旦更改了 app.js 内的代码,vendor.js 的 hash 也会改变,那么下次上线时, 160 | // 用户仍然需要重新下载 vendor.js 与 app.js——这样就失去了缓存的意义了。所以第二次new就是解决这个问题的 161 | // 参考:https://github.com/DDFE/DDFE-blog/issues/10 162 | new webpack.optimize.CommonsChunkPlugin({ 163 | name: 'manifest', 164 | minChunks: Infinity 165 | }), 166 | // This instance extracts shared chunks from code splitted chunks and bundles them 167 | // in a separate chunk, similar to the vendor chunk 168 | // see: https://webpack.js.org/plugins/commons-chunk-plugin/#extra-async-commons-chunk 169 | new webpack.optimize.CommonsChunkPlugin({ 170 | name: 'app', 171 | async: 'vendor-async', 172 | children: true, 173 | minChunks: 3 174 | }), 175 | 176 | // 拷贝静态资源到build文件夹中 177 | new CopyWebpackPlugin([ 178 | { 179 | // 定义要拷贝的资源的源目录 180 | from: path.resolve(__dirname, '../static'), 181 | // 定义要拷贝的资源的目标目录 182 | to: config.build.assetsSubDirectory, 183 | // 忽略拷贝指定的文件,可以使用模糊匹配 184 | ignore: ['.*'] 185 | } 186 | ]) 187 | ] 188 | }) 189 | 190 | if (config.build.productionGzip) { 191 | // 如果开启了生产环境的gzip 192 | const CompressionWebpackPlugin = require('compression-webpack-plugin') 193 | 194 | webpackConfig.plugins.push( 195 | new CompressionWebpackPlugin({ 196 | // 目标资源的名称 197 | // [path]会被替换成原资源路径 198 | // [query]会被替换成原查询字符串 199 | asset: '[path].gz[query]', 200 | // gzip算法 201 | // 这个选项可以配置成zlib模块中的各个算法 202 | // 也可以是(buffer, cb) => cb(buffer) 203 | algorithm: 'gzip', 204 | // 处理所有匹配此正则表达式的资源 205 | test: new RegExp( 206 | '\\.(' + 207 | config.build.productionGzipExtensions.join('|') + 208 | ')$' 209 | ), 210 | // 只处理比这个值大的资源 211 | threshold: 10240, 212 | // 只有压缩率比这个值小的资源才会被处理 213 | minRatio: 0.8 214 | }) 215 | ) 216 | } 217 | 218 | if (config.build.bundleAnalyzerReport) { 219 | // 如果需要生成一分bundle报告,则需要使用下面的这个插件 220 | const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin 221 | webpackConfig.plugins.push(new BundleAnalyzerPlugin()) 222 | } 223 | 224 | module.exports = webpackConfig 225 | 226 | 227 | // HtmlWebpackPlugin 替换HtmlWebpackPlugin方法 228 | var prodHtmlList = multipage.getProdHtmlList(); 229 | prodHtmlList.forEach(function(item){ 230 | webpackConfig.plugins.push(item) 231 | }) -------------------------------------------------------------------------------- /config/dev.env.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | const merge = require('webpack-merge') 3 | const prodEnv = require('./prod.env') 4 | 5 | module.exports = merge(prodEnv, { 6 | NODE_ENV: '"development"' 7 | }) 8 | -------------------------------------------------------------------------------- /config/index.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | 3 | // 这个文件主要是对开发环境和生产环境的一个基本的配置 4 | 5 | const path = require('path') 6 | 7 | /** 8 | * 注意 1 (新增) 9 | */ 10 | const projectInfo = require('./multipage.project') //项目信息 11 | 12 | module.exports = { 13 | // 开发环境的一个基本配置 14 | dev: { 15 | 16 | // Paths 17 | assetsSubDirectory: 'static', 18 | assetsPublicPath: '/', 19 | proxyTable: {}, 20 | 21 | // Various Dev Server settings 22 | host: 'localhost', // can be overwritten by process.env.HOST 23 | port: 8080, // can be overwritten by process.env.PORT, if port is in use, a free one will be determined 24 | autoOpenBrowser: false, 25 | errorOverlay: true, 26 | notifyOnErrors: true, 27 | poll: false, // https://webpack.js.org/configuration/dev-server/#devserver-watchoptions- 28 | 29 | 30 | /** 31 | * Source Maps 32 | */ 33 | 34 | // https://webpack.js.org/configuration/devtool/#development 35 | devtool: 'cheap-module-eval-source-map', 36 | 37 | // If you have problems debugging vue-files in devtools, 38 | // set this to false - it *may* help 39 | // https://vue-loader.vuejs.org/en/options.html#cachebusting 40 | cacheBusting: true, 41 | 42 | cssSourceMap: true 43 | }, 44 | 45 | build: { 46 | // Template for index.html 47 | // index: path.resolve(__dirname, '../dist/index.html'), 48 | // html文件的生成的地方 49 | index: path.resolve(__dirname, '../dist/'+projectInfo.name+'/index.html'), 50 | 51 | // 编译生成的文件的目录 52 | assetsRoot: path.resolve(__dirname, '../dist/'+projectInfo.name), 53 | // Paths 54 | // assetsRoot: path.resolve(__dirname, '../dist'), 55 | assetsSubDirectory: 'static', 56 | assetsPublicPath: '/', 57 | 58 | /** 59 | * Source Maps 60 | */ 61 | 62 | productionSourceMap: true, 63 | // https://webpack.js.org/configuration/devtool/#production 64 | devtool: '#source-map', 65 | 66 | // Gzip off by default as many popular static hosts such as 67 | // Surge or Netlify already gzip all static assets for you. 68 | // Before setting to `true`, make sure to: 69 | // npm install --save-dev compression-webpack-plugin 70 | productionGzip: false, 71 | productionGzipExtensions: ['js', 'css'], 72 | 73 | // Run the build command with an extra argument to 74 | // View the bundle analyzer report after build finishes: 75 | // `npm run build --report` 76 | // Set to `true` or `false` to always turn it on or off 77 | bundleAnalyzerReport: process.env.npm_config_report 78 | } 79 | } 80 | -------------------------------------------------------------------------------- /config/multipage.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | const path = require('path') 3 | const fs = require("fs") 4 | const config = require('./index') 5 | const HtmlWebpackPlugin = require('html-webpack-plugin') 6 | 7 | //项目信息 8 | const projectInfo = require('./multipage.project') 9 | 10 | 11 | let baseURL = './src/'+projectInfo.name+'/pages'; //根路径 12 | let moduleList = getModuleList(baseURL); //页面 13 | 14 | function resolve (dir) { 15 | return path.join(__dirname, '..', dir) 16 | } 17 | //获取当前目录中文件 18 | function getModuleList(path){ 19 | let list = []; 20 | let fsList = fs.readdirSync(path); //所有目录 21 | fsList.forEach(function(item,index){ 22 | let module = { 23 | id : item, 24 | js : path+'/'+item+'/index.js', 25 | html : path+'/'+item+'/index.html', 26 | favicon : path+'/'+item+'/favicon.ico' 27 | } 28 | list.push(module); 29 | }) 30 | return list; 31 | } 32 | 33 | //webpack.base.conf.js entry 34 | function getEntries(){ 35 | //js入口数组 36 | let entries = {} 37 | //变量模块列表 38 | moduleList.forEach(function (item) { 39 | if(item.id){ 40 | entries[item.id] = item.js; 41 | } 42 | }) 43 | return entries; 44 | } 45 | 46 | //webpack.dev.conf.js HtmlWebpackPlugin 47 | function getDevHtmlList(){ 48 | //缓存dev的Html模板 49 | let devList = []; 50 | 51 | moduleList.forEach(function (item) { 52 | if(item.id){ 53 | let opts = { 54 | filename: item.html, 55 | template: item.html, 56 | favicon: resolve(item.favicon), 57 | inject: true, 58 | chunks: [item.id, "vendor", "manifest"] 59 | } 60 | devList.push(new HtmlWebpackPlugin(opts)); 61 | } 62 | }) 63 | return devList; 64 | } 65 | 66 | //webpack.dev.conf.js devServer.historyApiFallback.rewrites 67 | function getHistoryRewrites(){ 68 | //缓存dev的 historyApiFallback.rewrites 69 | let historyList = []; 70 | 71 | moduleList.forEach(function (item) { 72 | if(item.id){ 73 | if(item.id == 'index'){ 74 | let opts = { 75 | from: /.*/, 76 | to: path.posix.join(config.dev.assetsPublicPath, item.html) 77 | } 78 | historyList.push(opts); 79 | }else{ 80 | let opts = { 81 | from: new RegExp('^\/'+item.id+''), 82 | to: path.posix.join(config.dev.assetsPublicPath, item.html) 83 | } 84 | historyList.unshift(opts); 85 | } 86 | } 87 | }) 88 | 89 | return historyList; 90 | } 91 | 92 | //webpack.prod.conf.js HtmlWebpackPlugin 93 | function getProdHtmlList(){ 94 | //缓存dev的Html模板 95 | let prodList = []; 96 | 97 | moduleList.forEach(function (item) { 98 | if(item.id){ 99 | let filename; 100 | if(item.id == 'index'){ 101 | filename = config.build.index; 102 | }else{ 103 | filename = config.build.assetsRoot+'/'+item.id+'/index.html' 104 | } 105 | let opts = { 106 | filename: filename, 107 | template: item.html, 108 | favicon: resolve(item.favicon), 109 | inject: true, 110 | minify: { 111 | removeComments: true, 112 | collapseWhitespace: true, 113 | removeAttributeQuotes: true 114 | }, 115 | chunksSortMode: 'dependency' 116 | } 117 | prodList.push(new HtmlWebpackPlugin(opts)); 118 | } 119 | }) 120 | return prodList; 121 | } 122 | 123 | module.exports = { 124 | getEntries, 125 | getDevHtmlList, 126 | getHistoryRewrites, 127 | getProdHtmlList, 128 | project : projectInfo 129 | } 130 | -------------------------------------------------------------------------------- /config/multipage.project.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | // const project = require('../src/admin/config') //admin 3 | const project = require('../src/master/config') //master 4 | //const project = require('../src/traffic/config') //traffic 5 | 6 | module.exports = project; -------------------------------------------------------------------------------- /config/prod.env.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | module.exports = { 3 | NODE_ENV: '"production"' 4 | } 5 | -------------------------------------------------------------------------------- /config/test.env.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | const merge = require('webpack-merge') 3 | const devEnv = require('./dev.env') 4 | 5 | module.exports = merge(devEnv, { 6 | NODE_ENV: '"testing"' 7 | }) 8 | -------------------------------------------------------------------------------- /dist/admin/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/augustVino/vue-multi-project/05f96068f4ab59aeceaff6ca187a0fdd3587dfad/dist/admin/favicon.ico -------------------------------------------------------------------------------- /dist/admin/index.html: -------------------------------------------------------------------------------- 1 | vue-multi-project
-------------------------------------------------------------------------------- /dist/admin/static/css/index.3a947c1c1f207832148c696e78c1f1bd.css: -------------------------------------------------------------------------------- 1 | #app{font-family:Avenir,Helvetica,Arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-align:center;color:#2c3e50;margin-top:60px}h1[data-v-29427ef6],h2[data-v-29427ef6]{font-weight:400}ul[data-v-29427ef6]{list-style-type:none;padding:0}li[data-v-29427ef6]{display:inline-block;margin:0 10px}a[data-v-29427ef6]{color:#42b983} 2 | /*# sourceMappingURL=index.3a947c1c1f207832148c696e78c1f1bd.css.map */ -------------------------------------------------------------------------------- /dist/admin/static/css/index.3a947c1c1f207832148c696e78c1f1bd.css.map: -------------------------------------------------------------------------------- 1 | {"version":3,"sources":["index.3a947c1c1f207832148c696e78c1f1bd.css"],"names":[],"mappings":"AACA,KACE,8CAAoD,AACpD,mCAAoC,AACpC,kCAAmC,AACnC,kBAAmB,AACnB,cAAe,AACf,eAAiB,CAClB,AAED,wCACE,eAAoB,CACrB,AACD,oBACE,qBAAsB,AACtB,SAAW,CACZ,AACD,oBACE,qBAAsB,AACtB,aAAe,CAChB,AACD,mBACE,aAAe,CAChB","file":"index.3a947c1c1f207832148c696e78c1f1bd.css","sourcesContent":["\n#app {\n font-family: 'Avenir', Helvetica, Arial, sans-serif;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n text-align: center;\n color: #2c3e50;\n margin-top: 60px;\n}\n\nh1[data-v-29427ef6], h2[data-v-29427ef6] {\n font-weight: normal;\n}\nul[data-v-29427ef6] {\n list-style-type: none;\n padding: 0;\n}\nli[data-v-29427ef6] {\n display: inline-block;\n margin: 0 10px;\n}\na[data-v-29427ef6] {\n color: #42b983;\n}\n"]} -------------------------------------------------------------------------------- /dist/admin/static/js/index.3675151582d13b8e0c7e.js: -------------------------------------------------------------------------------- 1 | webpackJsonp([1],{"2kgF":function(t,i){},"4BF6":function(t,i){},akkm:function(t,i){t.exports="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAYAAACtWK6eAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyNpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMDE0IDc5LjE1Njc5NywgMjAxNC8wOC8yMC0wOTo1MzowMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6OTk2QkI4RkE3NjE2MTFFNUE4NEU4RkIxNjQ5MTYyRDgiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6OTk2QkI4Rjk3NjE2MTFFNUE4NEU4RkIxNjQ5MTYyRDgiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIChNYWNpbnRvc2gpIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6NjU2QTEyNzk3NjkyMTFFMzkxODk4RDkwQkY4Q0U0NzYiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6NjU2QTEyN0E3NjkyMTFFMzkxODk4RDkwQkY4Q0U0NzYiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz5WHowqAAAXNElEQVR42uxda4xd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"},hfAa:function(t,i,c){"use strict";Object.defineProperty(i,"__esModule",{value:!0});var I=c("7+uW"),n={name:"App",data:function(){return{imgurl:c("akkm")}}},l={render:function(){var t=this.$createElement,i=this._self._c||t;return i("div",{attrs:{id:"app"}},[i("img",{attrs:{src:this.imgurl}}),this._v(" "),i("router-view")],1)},staticRenderFns:[]};var e=c("VU/8")(n,l,!1,function(t){c("4BF6")},null,null).exports,s=c("/ocq"),a={render:function(){var t=this.$createElement,i=this._self._c||t;return i("div",{staticClass:"hello"},[i("h1",[this._v(this._s(this.msg))])])},staticRenderFns:[]};var h=c("VU/8")({name:"HelloWorld",data:function(){return{msg:"欢迎来到admin项目"}}},a,!1,function(t){c("2kgF")},"data-v-29427ef6",null).exports;I.a.use(s.a);var k=new s.a({routes:[{path:"/",name:"HelloWorld",component:h}]});I.a.config.productionTip=!1,new I.a({el:"#app",router:k,components:{App:e},template:""})}},["hfAa"]); 2 | //# sourceMappingURL=index.3675151582d13b8e0c7e.js.map -------------------------------------------------------------------------------- /dist/admin/static/js/index.3675151582d13b8e0c7e.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"sources":["webpack:///./src/global/assets/logo.png","webpack:///src/admin/pages/index/App.vue","webpack:///./src/admin/pages/index/App.vue?a83c","webpack:///./src/admin/pages/index/App.vue","webpack:///./src/admin/components/HelloWorld.vue?d4f0","webpack:///./src/admin/components/HelloWorld.vue","webpack:///src/admin/components/HelloWorld.vue","webpack:///./src/admin/router/index.js","webpack:///./src/admin/pages/index/index.js"],"names":["module","exports","App","index_App","render","_h","this","$createElement","_c","_self","attrs","id","src","imgurl","_v","staticRenderFns","pages_index_App","__webpack_require__","normalizeComponent","ssrContext","components_HelloWorld","staticClass","_s","msg","admin_components_HelloWorld","HelloWorld_normalizeComponent","vue_esm","use","vue_router_esm","router","routes","path","name","component","config","productionTip","el","components","template"],"mappings":"mFAAAA,EAAAC,QAAA,yiSCQAC,QAEA,sCAIA,WCXAC,GADiBC,OAFjB,WAA0B,IAAaC,EAAbC,KAAaC,eAA0BC,EAAvCF,KAAuCG,MAAAD,IAAAH,EAAwB,OAAAG,EAAA,OAAiBE,OAAOC,GAAA,SAAYH,EAAA,OAAYE,OAAOE,IAAtHN,KAAsHO,UAAtHP,KAAwIQ,GAAA,KAAAN,EAAA,oBAEjJO,oBCCjB,IAuBAC,EAvBAC,EAAA,OAcAC,CACAhB,EACAC,GATA,EAVA,SAAAgB,GACAF,EAAA,SAaA,KAEA,MAUA,oBCvBAG,GADiBhB,OAFjB,WAA0B,IAAaC,EAAbC,KAAaC,eAA0BC,EAAvCF,KAAuCG,MAAAD,IAAAH,EAAwB,OAAAG,EAAA,OAAiBa,YAAA,UAAoBb,EAAA,MAApGF,KAAoGQ,GAApGR,KAAoGgB,GAApGhB,KAAoGiB,WAE7GR,oBCCjB,IAuBAS,EAvBAP,EAAA,OAcAQ,OCRA,wCAIA,iBDMAL,GATA,EAVA,SAAAD,GACAF,EAAA,SAaA,kBAEA,MAUA,QEtBAS,EAAA,EAAIC,IAAIC,EAAA,GAER,IAAAC,EAAA,IAAmBD,EAAA,GACjBE,SAEIC,KAAM,IACNC,KAAM,aACNC,UAAWT,MCLjBE,EAAA,EAAIQ,OAAOC,eAAgB,EAG3B,IAAIT,EAAA,GACFU,GAAI,OACJP,SACAQ,YAAcnC,IAAAc,GACdsB,SAAU","file":"static/js/index.3675151582d13b8e0c7e.js","sourcesContent":["module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAYAAACtWK6eAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyNpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMDE0IDc5LjE1Njc5NywgMjAxNC8wOC8yMC0wOTo1MzowMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6OTk2QkI4RkE3NjE2MTFFNUE4NEU4RkIxNjQ5MTYyRDgiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6OTk2QkI4Rjk3NjE2MTFFNUE4NEU4RkIxNjQ5MTYyRDgiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIChNYWNpbnRvc2gpIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6NjU2QTEyNzk3NjkyMTFFMzkxODk4RDkwQkY4Q0U0NzYiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6NjU2QTEyN0E3NjkyMTFFMzkxODk4RDkwQkY4Q0U0NzYiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz5WHowqAAAXNElEQVR42uxda4xd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\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/global/assets/logo.png\n// module id = akkm\n// module chunks = 1","\n\n\n\n\n\n\n\n// WEBPACK FOOTER //\n// src/admin/pages/index/App.vue","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{attrs:{\"id\":\"app\"}},[_c('img',{attrs:{\"src\":_vm.imgurl}}),_vm._v(\" \"),_c('router-view')],1)}\nvar staticRenderFns = []\nvar esExports = { render: render, staticRenderFns: staticRenderFns }\nexport default esExports\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/vue-loader/lib/template-compiler?{\"id\":\"data-v-462acfc8\",\"hasScoped\":false,\"transformToRequire\":{\"video\":[\"src\",\"poster\"],\"source\":\"src\",\"img\":\"src\",\"image\":\"xlink:href\"},\"buble\":{\"transforms\":{}}}!./node_modules/vue-loader/lib/selector.js?type=template&index=0!./src/admin/pages/index/App.vue\n// module id = null\n// module chunks = ","function injectStyle (ssrContext) {\n require(\"!!../../../../node_modules/extract-text-webpack-plugin/dist/loader.js?{\\\"omit\\\":1,\\\"remove\\\":true}!vue-style-loader!css-loader?{\\\"sourceMap\\\":true}!../../../../node_modules/vue-loader/lib/style-compiler/index?{\\\"vue\\\":true,\\\"id\\\":\\\"data-v-462acfc8\\\",\\\"scoped\\\":false,\\\"hasInlineConfig\\\":false}!../../../../node_modules/vue-loader/lib/selector?type=styles&index=0!./App.vue\")\n}\nvar normalizeComponent = require(\"!../../../../node_modules/vue-loader/lib/component-normalizer\")\n/* script */\nexport * from \"!!babel-loader!../../../../node_modules/vue-loader/lib/selector?type=script&index=0!./App.vue\"\nimport __vue_script__ from \"!!babel-loader!../../../../node_modules/vue-loader/lib/selector?type=script&index=0!./App.vue\"\n/* template */\nimport __vue_template__ from \"!!../../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-462acfc8\\\",\\\"hasScoped\\\":false,\\\"transformToRequire\\\":{\\\"video\\\":[\\\"src\\\",\\\"poster\\\"],\\\"source\\\":\\\"src\\\",\\\"img\\\":\\\"src\\\",\\\"image\\\":\\\"xlink:href\\\"},\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../../node_modules/vue-loader/lib/selector?type=template&index=0!./App.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_template__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/admin/pages/index/App.vue\n// module id = null\n// module chunks = ","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"hello\"},[_c('h1',[_vm._v(_vm._s(_vm.msg))])])}\nvar staticRenderFns = []\nvar esExports = { render: render, staticRenderFns: staticRenderFns }\nexport default esExports\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/vue-loader/lib/template-compiler?{\"id\":\"data-v-29427ef6\",\"hasScoped\":true,\"transformToRequire\":{\"video\":[\"src\",\"poster\"],\"source\":\"src\",\"img\":\"src\",\"image\":\"xlink:href\"},\"buble\":{\"transforms\":{}}}!./node_modules/vue-loader/lib/selector.js?type=template&index=0!./src/admin/components/HelloWorld.vue\n// module id = null\n// module chunks = ","function injectStyle (ssrContext) {\n require(\"!!../../../node_modules/extract-text-webpack-plugin/dist/loader.js?{\\\"omit\\\":1,\\\"remove\\\":true}!vue-style-loader!css-loader?{\\\"sourceMap\\\":true}!../../../node_modules/vue-loader/lib/style-compiler/index?{\\\"vue\\\":true,\\\"id\\\":\\\"data-v-29427ef6\\\",\\\"scoped\\\":true,\\\"hasInlineConfig\\\":false}!../../../node_modules/vue-loader/lib/selector?type=styles&index=0!./HelloWorld.vue\")\n}\nvar normalizeComponent = require(\"!../../../node_modules/vue-loader/lib/component-normalizer\")\n/* script */\nexport * from \"!!babel-loader!../../../node_modules/vue-loader/lib/selector?type=script&index=0!./HelloWorld.vue\"\nimport __vue_script__ from \"!!babel-loader!../../../node_modules/vue-loader/lib/selector?type=script&index=0!./HelloWorld.vue\"\n/* template */\nimport __vue_template__ from \"!!../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-29427ef6\\\",\\\"hasScoped\\\":true,\\\"transformToRequire\\\":{\\\"video\\\":[\\\"src\\\",\\\"poster\\\"],\\\"source\\\":\\\"src\\\",\\\"img\\\":\\\"src\\\",\\\"image\\\":\\\"xlink:href\\\"},\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../node_modules/vue-loader/lib/selector?type=template&index=0!./HelloWorld.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = \"data-v-29427ef6\"\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_template__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/admin/components/HelloWorld.vue\n// module id = null\n// module chunks = ","\n\n\n\n\n\n\n\n\n// WEBPACK FOOTER //\n// src/admin/components/HelloWorld.vue","import Vue from 'vue'\nimport Router from 'vue-router'\nimport HelloWorld from '@/components/HelloWorld'\n\nVue.use(Router)\n\nexport default new Router({\n routes: [\n {\n path: '/',\n name: 'HelloWorld',\n component: HelloWorld\n }\n ]\n})\n\n\n\n// WEBPACK FOOTER //\n// ./src/admin/router/index.js","// The Vue build version to load with the `import` command\n// (runtime-only or standalone) has been set in webpack.base.conf with an alias.\nimport Vue from 'vue'\nimport App from './App'\nimport router from '../../router';\n\nVue.config.productionTip = false\n\n/* eslint-disable no-new */\nnew Vue({\n el: '#app',\n router,\n components: { App },\n template: ''\n})\n\n\n\n// WEBPACK FOOTER //\n// ./src/admin/pages/index/index.js"],"sourceRoot":""} -------------------------------------------------------------------------------- /dist/admin/static/js/manifest.2ae2e69a05c33dfc65f8.js: -------------------------------------------------------------------------------- 1 | !function(r){var n=window.webpackJsonp;window.webpackJsonp=function(e,u,c){for(var f,i,p,a=0,l=[];avue-multi-project
-------------------------------------------------------------------------------- /dist/master/static/css/index.7cb8a531774c9910737734e1c15db140.css: -------------------------------------------------------------------------------- 1 | #app{font-family:Avenir,Helvetica,Arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-align:center;color:#2c3e50;margin-top:60px}h1[data-v-4208fb8b],h2[data-v-4208fb8b]{font-weight:400}ul[data-v-4208fb8b]{list-style-type:none;padding:0}li[data-v-4208fb8b]{display:inline-block;margin:0 10px}a[data-v-4208fb8b]{color:#42b983} 2 | /*# sourceMappingURL=index.7cb8a531774c9910737734e1c15db140.css.map */ -------------------------------------------------------------------------------- /dist/master/static/css/index.7cb8a531774c9910737734e1c15db140.css.map: -------------------------------------------------------------------------------- 1 | {"version":3,"sources":["index.7cb8a531774c9910737734e1c15db140.css"],"names":[],"mappings":"AACA,KACE,8CAAoD,AACpD,mCAAoC,AACpC,kCAAmC,AACnC,kBAAmB,AACnB,cAAe,AACf,eAAiB,CAClB,AAED,wCACE,eAAoB,CACrB,AACD,oBACE,qBAAsB,AACtB,SAAW,CACZ,AACD,oBACE,qBAAsB,AACtB,aAAe,CAChB,AACD,mBACE,aAAe,CAChB","file":"index.7cb8a531774c9910737734e1c15db140.css","sourcesContent":["\n#app {\n font-family: 'Avenir', Helvetica, Arial, sans-serif;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n text-align: center;\n color: #2c3e50;\n margin-top: 60px;\n}\n\nh1[data-v-4208fb8b], h2[data-v-4208fb8b] {\n font-weight: normal;\n}\nul[data-v-4208fb8b] {\n list-style-type: none;\n padding: 0;\n}\nli[data-v-4208fb8b] {\n display: inline-block;\n margin: 0 10px;\n}\na[data-v-4208fb8b] {\n color: #42b983;\n}\n"]} -------------------------------------------------------------------------------- /dist/master/static/js/index.0f86190d29b252e0535a.js: -------------------------------------------------------------------------------- 1 | webpackJsonp([1],{5863:function(t,i){},akkm:function(t,i){t.exports="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAYAAACtWK6eAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyNpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMDE0IDc5LjE1Njc5NywgMjAxNC8wOC8yMC0wOTo1MzowMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6OTk2QkI4RkE3NjE2MTFFNUE4NEU4RkIxNjQ5MTYyRDgiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6OTk2QkI4Rjk3NjE2MTFFNUE4NEU4RkIxNjQ5MTYyRDgiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIChNYWNpbnRvc2gpIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6NjU2QTEyNzk3NjkyMTFFMzkxODk4RDkwQkY4Q0U0NzYiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6NjU2QTEyN0E3NjkyMTFFMzkxODk4RDkwQkY4Q0U0NzYiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz5WHowqAAAXNElEQVR42uxda4xd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"},"u/vV":function(t,i,c){"use strict";Object.defineProperty(i,"__esModule",{value:!0});var I=c("7+uW"),n={name:"App",data:function(){return{imgurl:c("akkm")}}},l={render:function(){var t=this.$createElement,i=this._self._c||t;return i("div",{attrs:{id:"app"}},[i("img",{attrs:{src:this.imgurl}}),this._v(" "),i("router-view")],1)},staticRenderFns:[]};var s=c("VU/8")(n,l,!1,function(t){c("xV2Q")},null,null).exports,e=c("/ocq"),a={render:function(){var t=this.$createElement,i=this._self._c||t;return i("div",{staticClass:"hello"},[i("h1",[this._v(this._s(this.msg))])])},staticRenderFns:[]};var h=c("VU/8")({name:"HelloWorld",data:function(){return{msg:"欢迎来到master项目"}}},a,!1,function(t){c("5863")},"data-v-4208fb8b",null).exports;I.a.use(e.a);var R=new e.a({routes:[{path:"/",name:"HelloWorld",component:h}]});I.a.config.productionTip=!1,new I.a({el:"#app",router:R,components:{App:s},template:""})},xV2Q:function(t,i){}},["u/vV"]); 2 | //# sourceMappingURL=index.0f86190d29b252e0535a.js.map -------------------------------------------------------------------------------- /dist/master/static/js/index.0f86190d29b252e0535a.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"sources":["webpack:///./src/global/assets/logo.png","webpack:///src/master/pages/index/App.vue","webpack:///./src/master/pages/index/App.vue?12fc","webpack:///./src/master/pages/index/App.vue","webpack:///./src/master/components/HelloWorld.vue?d6be","webpack:///./src/master/components/HelloWorld.vue","webpack:///src/master/components/HelloWorld.vue","webpack:///./src/master/router/index.js","webpack:///./src/master/pages/index/index.js"],"names":["module","exports","App","index_App","render","_h","this","$createElement","_c","_self","attrs","id","src","imgurl","_v","staticRenderFns","pages_index_App","__webpack_require__","normalizeComponent","ssrContext","components_HelloWorld","staticClass","_s","msg","master_components_HelloWorld","HelloWorld_normalizeComponent","vue_esm","use","vue_router_esm","router","routes","path","name","component","config","productionTip","el","components","template"],"mappings":"0DAAAA,EAAAC,QAAA,2iSCQAC,QAEA,sCAIA,WCXAC,GADiBC,OAFjB,WAA0B,IAAaC,EAAbC,KAAaC,eAA0BC,EAAvCF,KAAuCG,MAAAD,IAAAH,EAAwB,OAAAG,EAAA,OAAiBE,OAAOC,GAAA,SAAYH,EAAA,OAAYE,OAAOE,IAAtHN,KAAsHO,UAAtHP,KAAwIQ,GAAA,KAAAN,EAAA,oBAEjJO,oBCCjB,IAuBAC,EAvBAC,EAAA,OAcAC,CACAhB,EACAC,GATA,EAVA,SAAAgB,GACAF,EAAA,SAaA,KAEA,MAUA,oBCvBAG,GADiBhB,OAFjB,WAA0B,IAAaC,EAAbC,KAAaC,eAA0BC,EAAvCF,KAAuCG,MAAAD,IAAAH,EAAwB,OAAAG,EAAA,OAAiBa,YAAA,UAAoBb,EAAA,MAApGF,KAAoGQ,GAApGR,KAAoGgB,GAApGhB,KAAoGiB,WAE7GR,oBCCjB,IAuBAS,EAvBAP,EAAA,OAcAQ,OCRA,wCAIA,kBDMAL,GATA,EAVA,SAAAD,GACAF,EAAA,SAaA,kBAEA,MAUA,QEtBAS,EAAA,EAAIC,IAAIC,EAAA,GAER,IAAAC,EAAA,IAAmBD,EAAA,GACjBE,SAEIC,KAAM,IACNC,KAAM,aACNC,UAAWT,MCLjBE,EAAA,EAAIQ,OAAOC,eAAgB,EAG3B,IAAIT,EAAA,GACFU,GAAI,OACJP,SACAQ,YAAcnC,IAAAc,GACdsB,SAAU","file":"static/js/index.0f86190d29b252e0535a.js","sourcesContent":["module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAYAAACtWK6eAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyNpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMDE0IDc5LjE1Njc5NywgMjAxNC8wOC8yMC0wOTo1MzowMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6OTk2QkI4RkE3NjE2MTFFNUE4NEU4RkIxNjQ5MTYyRDgiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6OTk2QkI4Rjk3NjE2MTFFNUE4NEU4RkIxNjQ5MTYyRDgiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIChNYWNpbnRvc2gpIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6NjU2QTEyNzk3NjkyMTFFMzkxODk4RDkwQkY4Q0U0NzYiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6NjU2QTEyN0E3NjkyMTFFMzkxODk4RDkwQkY4Q0U0NzYiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz5WHowqAAAXNElEQVR42uxda4xd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\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/global/assets/logo.png\n// module id = akkm\n// module chunks = 1","\n\n\n\n\n\n\n\n// WEBPACK FOOTER //\n// src/master/pages/index/App.vue","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{attrs:{\"id\":\"app\"}},[_c('img',{attrs:{\"src\":_vm.imgurl}}),_vm._v(\" \"),_c('router-view')],1)}\nvar staticRenderFns = []\nvar esExports = { render: render, staticRenderFns: staticRenderFns }\nexport default esExports\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/vue-loader/lib/template-compiler?{\"id\":\"data-v-66b06aea\",\"hasScoped\":false,\"transformToRequire\":{\"video\":[\"src\",\"poster\"],\"source\":\"src\",\"img\":\"src\",\"image\":\"xlink:href\"},\"buble\":{\"transforms\":{}}}!./node_modules/vue-loader/lib/selector.js?type=template&index=0!./src/master/pages/index/App.vue\n// module id = null\n// module chunks = ","function injectStyle (ssrContext) {\n require(\"!!../../../../node_modules/extract-text-webpack-plugin/dist/loader.js?{\\\"omit\\\":1,\\\"remove\\\":true}!vue-style-loader!css-loader?{\\\"sourceMap\\\":true}!../../../../node_modules/vue-loader/lib/style-compiler/index?{\\\"vue\\\":true,\\\"id\\\":\\\"data-v-66b06aea\\\",\\\"scoped\\\":false,\\\"hasInlineConfig\\\":false}!../../../../node_modules/vue-loader/lib/selector?type=styles&index=0!./App.vue\")\n}\nvar normalizeComponent = require(\"!../../../../node_modules/vue-loader/lib/component-normalizer\")\n/* script */\nexport * from \"!!babel-loader!../../../../node_modules/vue-loader/lib/selector?type=script&index=0!./App.vue\"\nimport __vue_script__ from \"!!babel-loader!../../../../node_modules/vue-loader/lib/selector?type=script&index=0!./App.vue\"\n/* template */\nimport __vue_template__ from \"!!../../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-66b06aea\\\",\\\"hasScoped\\\":false,\\\"transformToRequire\\\":{\\\"video\\\":[\\\"src\\\",\\\"poster\\\"],\\\"source\\\":\\\"src\\\",\\\"img\\\":\\\"src\\\",\\\"image\\\":\\\"xlink:href\\\"},\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../../node_modules/vue-loader/lib/selector?type=template&index=0!./App.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_template__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/master/pages/index/App.vue\n// module id = null\n// module chunks = ","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"hello\"},[_c('h1',[_vm._v(_vm._s(_vm.msg))])])}\nvar staticRenderFns = []\nvar esExports = { render: render, staticRenderFns: staticRenderFns }\nexport default esExports\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/vue-loader/lib/template-compiler?{\"id\":\"data-v-4208fb8b\",\"hasScoped\":true,\"transformToRequire\":{\"video\":[\"src\",\"poster\"],\"source\":\"src\",\"img\":\"src\",\"image\":\"xlink:href\"},\"buble\":{\"transforms\":{}}}!./node_modules/vue-loader/lib/selector.js?type=template&index=0!./src/master/components/HelloWorld.vue\n// module id = null\n// module chunks = ","function injectStyle (ssrContext) {\n require(\"!!../../../node_modules/extract-text-webpack-plugin/dist/loader.js?{\\\"omit\\\":1,\\\"remove\\\":true}!vue-style-loader!css-loader?{\\\"sourceMap\\\":true}!../../../node_modules/vue-loader/lib/style-compiler/index?{\\\"vue\\\":true,\\\"id\\\":\\\"data-v-4208fb8b\\\",\\\"scoped\\\":true,\\\"hasInlineConfig\\\":false}!../../../node_modules/vue-loader/lib/selector?type=styles&index=0!./HelloWorld.vue\")\n}\nvar normalizeComponent = require(\"!../../../node_modules/vue-loader/lib/component-normalizer\")\n/* script */\nexport * from \"!!babel-loader!../../../node_modules/vue-loader/lib/selector?type=script&index=0!./HelloWorld.vue\"\nimport __vue_script__ from \"!!babel-loader!../../../node_modules/vue-loader/lib/selector?type=script&index=0!./HelloWorld.vue\"\n/* template */\nimport __vue_template__ from \"!!../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-4208fb8b\\\",\\\"hasScoped\\\":true,\\\"transformToRequire\\\":{\\\"video\\\":[\\\"src\\\",\\\"poster\\\"],\\\"source\\\":\\\"src\\\",\\\"img\\\":\\\"src\\\",\\\"image\\\":\\\"xlink:href\\\"},\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../node_modules/vue-loader/lib/selector?type=template&index=0!./HelloWorld.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = \"data-v-4208fb8b\"\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_template__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/master/components/HelloWorld.vue\n// module id = null\n// module chunks = ","\n\n\n\n\n\n\n\n\n// WEBPACK FOOTER //\n// src/master/components/HelloWorld.vue","import Vue from 'vue'\nimport Router from 'vue-router'\nimport HelloWorld from '@/components/HelloWorld'\n\nVue.use(Router)\n\nexport default new Router({\n routes: [\n {\n path: '/',\n name: 'HelloWorld',\n component: HelloWorld\n }\n ]\n})\n\n\n\n// WEBPACK FOOTER //\n// ./src/master/router/index.js","// The Vue build version to load with the `import` command\n// (runtime-only or standalone) has been set in webpack.base.conf with an alias.\nimport Vue from 'vue'\nimport App from './App'\nimport router from '../../router';\n\nVue.config.productionTip = false\n\n/* eslint-disable no-new */\nnew Vue({\n el: '#app',\n router,\n components: { App },\n template: ''\n})\n\n\n\n// WEBPACK FOOTER //\n// ./src/master/pages/index/index.js"],"sourceRoot":""} -------------------------------------------------------------------------------- /dist/master/static/js/manifest.2ae2e69a05c33dfc65f8.js: -------------------------------------------------------------------------------- 1 | !function(r){var n=window.webpackJsonp;window.webpackJsonp=function(e,u,c){for(var f,i,p,a=0,l=[];a= 6.0.0", 63 | "npm": ">= 3.0.0" 64 | }, 65 | "browserslist": [ 66 | "> 1%", 67 | "last 2 versions", 68 | "not ie <= 8" 69 | ] 70 | } 71 | -------------------------------------------------------------------------------- /src/admin/components/HelloWorld.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 17 | 18 | 19 | 35 | -------------------------------------------------------------------------------- /src/admin/config/index.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | module.exports = { 3 | name : 'admin', //文件夹名称 和最后打包后文件夹的名称 /src/admin/ 4 | } -------------------------------------------------------------------------------- /src/admin/pages/index/App.vue: -------------------------------------------------------------------------------- 1 | 7 | 8 | 18 | 19 | 29 | -------------------------------------------------------------------------------- /src/admin/pages/index/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/augustVino/vue-multi-project/05f96068f4ab59aeceaff6ca187a0fdd3587dfad/src/admin/pages/index/favicon.ico -------------------------------------------------------------------------------- /src/admin/pages/index/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | vue-multi-project 7 | 8 | 9 |
10 | 11 | 12 | -------------------------------------------------------------------------------- /src/admin/pages/index/index.js: -------------------------------------------------------------------------------- 1 | // The Vue build version to load with the `import` command 2 | // (runtime-only or standalone) has been set in webpack.base.conf with an alias. 3 | import Vue from 'vue' 4 | import App from './App' 5 | import router from '../../router'; 6 | 7 | Vue.config.productionTip = false 8 | 9 | /* eslint-disable no-new */ 10 | new Vue({ 11 | el: '#app', 12 | router, 13 | components: { App }, 14 | template: '' 15 | }) 16 | -------------------------------------------------------------------------------- /src/admin/router/index.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import Router from 'vue-router' 3 | import HelloWorld from '@/components/HelloWorld' 4 | 5 | Vue.use(Router) 6 | 7 | export default new Router({ 8 | routes: [ 9 | { 10 | path: '/', 11 | name: 'HelloWorld', 12 | component: HelloWorld 13 | } 14 | ] 15 | }) 16 | -------------------------------------------------------------------------------- /src/global/assets/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/augustVino/vue-multi-project/05f96068f4ab59aeceaff6ca187a0fdd3587dfad/src/global/assets/logo.png -------------------------------------------------------------------------------- /src/master/components/HelloWorld.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 17 | 18 | 19 | 35 | -------------------------------------------------------------------------------- /src/master/config/index.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | module.exports = { 3 | name : 'master', //文件夹名称 和最后打包后文件夹的名称 /src/admin/ 4 | } -------------------------------------------------------------------------------- /src/master/pages/index/App.vue: -------------------------------------------------------------------------------- 1 | 7 | 8 | 18 | 19 | 29 | -------------------------------------------------------------------------------- /src/master/pages/index/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/augustVino/vue-multi-project/05f96068f4ab59aeceaff6ca187a0fdd3587dfad/src/master/pages/index/favicon.ico -------------------------------------------------------------------------------- /src/master/pages/index/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | vue-multi-project 7 | 8 | 9 |
10 | 11 | 12 | -------------------------------------------------------------------------------- /src/master/pages/index/index.js: -------------------------------------------------------------------------------- 1 | // The Vue build version to load with the `import` command 2 | // (runtime-only or standalone) has been set in webpack.base.conf with an alias. 3 | import Vue from 'vue' 4 | import App from './App' 5 | import router from '../../router'; 6 | 7 | Vue.config.productionTip = false 8 | 9 | /* eslint-disable no-new */ 10 | new Vue({ 11 | el: '#app', 12 | router, 13 | components: { App }, 14 | template: '' 15 | }) 16 | -------------------------------------------------------------------------------- /src/master/router/index.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import Router from 'vue-router' 3 | import HelloWorld from '@/components/HelloWorld' 4 | 5 | Vue.use(Router) 6 | 7 | export default new Router({ 8 | routes: [ 9 | { 10 | path: '/', 11 | name: 'HelloWorld', 12 | component: HelloWorld 13 | } 14 | ] 15 | }) 16 | -------------------------------------------------------------------------------- /static/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/augustVino/vue-multi-project/05f96068f4ab59aeceaff6ca187a0fdd3587dfad/static/.gitkeep -------------------------------------------------------------------------------- /test/unit/.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "env": { 3 | "jest": true 4 | }, 5 | "globals": { 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /test/unit/jest.conf.js: -------------------------------------------------------------------------------- 1 | const path = require('path') 2 | 3 | module.exports = { 4 | rootDir: path.resolve(__dirname, '../../'), 5 | moduleFileExtensions: [ 6 | 'js', 7 | 'json', 8 | 'vue' 9 | ], 10 | moduleNameMapper: { 11 | '^@/(.*)$': '/src/$1' 12 | }, 13 | transform: { 14 | '^.+\\.js$': '/node_modules/babel-jest', 15 | '.*\\.(vue)$': '/node_modules/vue-jest' 16 | }, 17 | snapshotSerializers: ['/node_modules/jest-serializer-vue'], 18 | setupFiles: ['/test/unit/setup'], 19 | mapCoverage: true, 20 | coverageDirectory: '/test/unit/coverage', 21 | collectCoverageFrom: [ 22 | 'src/**/*.{js,vue}', 23 | '!src/main.js', 24 | '!src/router/index.js', 25 | '!**/node_modules/**' 26 | ] 27 | } 28 | -------------------------------------------------------------------------------- /test/unit/setup.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | 3 | Vue.config.productionTip = false 4 | -------------------------------------------------------------------------------- /test/unit/specs/HelloWorld.spec.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import HelloWorld from '@/components/HelloWorld' 3 | 4 | describe('HelloWorld.vue', () => { 5 | it('should render correct contents', () => { 6 | const Constructor = Vue.extend(HelloWorld) 7 | const vm = new Constructor().$mount() 8 | expect(vm.$el.querySelector('.hello h1').textContent) 9 | .toEqual('Welcome to Your Vue.js App') 10 | }) 11 | }) 12 | --------------------------------------------------------------------------------