├── .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\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
{{ msg }}
\n \n\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\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
{{ msg }}
\n \n\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 |
2 |
3 |
{{ msg }}
4 |
5 |
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 |
2 |
3 |
![]()
4 |
5 |
6 |
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 |
2 |
3 |
{{ msg }}
4 |
5 |
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 |
2 |
3 |
![]()
4 |
5 |
6 |
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 |
--------------------------------------------------------------------------------