Home > Web Front-end > JS Tutorial > How to use cli to reconstruct multi-page scaffolding in vue

How to use cli to reconstruct multi-page scaffolding in vue

亚连
Release: 2018-06-09 17:42:55
Original
1535 people have browsed it

This article introduces you step by step the process of reconstructing multi-page scaffolding based on vue cli. It is very good and has reference value. Friends who need it can refer to

The officially provided project generation tool vue-cli does not have the right Multi-page webApp support, but in actual projects, we need such scaffolding. After referring to the methods of many experts, here is a solution for converting my single-page scaffolding into multi-page scaffolding for your reference. Please correct me if I have any bad points.

Preparation

Use vue-cli to generate a single-page project scaffolding you need, and then we will start our modification project.

Reconstruction process

Step 1 Change the directory structure

  • step1 Create a new views folder under the src directory, and then create a new index folder under the views folder

  • step2 Move main.js and App.vue in the src directory to step1 index folder, and rename main.js to index.js

  • step3 Move the router folder in the src directory to the index folder in step1, if not used Router can be commented out in index.js, but I have not used it because each of my pages is not a single-page application and there is no need to use the routing function

  • step4 Change the index in the root directory Move the .html file to the index folder in step 1

Step 2 Modify the configuration file under build

It will be divided in the production environment The page packages unique js files and extracts public js files, so that everything is not packaged into a lump. The file directory structure after packaging is also relatively clear. All modifications are in the build folder

step1 Modify utils.js and add two functions, one is used to obtain multiple entries for the page, and the other is used to input the packaged page and inject js:

var glob = require('glob')
var HtmlWebpackPlugin = require('html-webpack-plugin')
var PAGE_PATH = path.resolve(__dirname, '../src/views')
var merge = require('webpack-merge')
//多入口配置
//获取views文件夹下,每个页面下的index.js作为页面入口,故每个页面下都必须有index.js
exports.entries = function() {
 var entryFiles = glob.sync(PAGE_PATH + '/*/index.js')
 var map = {}, tmp = [], pathname = '';
 entryFiles.forEach((filePath) => {
 var filename = filePath.substring(filePath.lastIndexOf('\/') + 1, filePath.lastIndexOf('.'))
 tmp = filePath.split('/').splice(-4)
 map[tmp[2] + '/' + filename] = filePath
 })
 return map
}
//多页面输出配置
//读取views文件夹下的对应每个页面的html后缀文件,然后放入数组中
//如果想要更深的定制或者修改,建议大家看一下CommonsChunkPlugin
//推荐一个基础的 https://segmentfault.com/q/1010000009070061
exports.htmlPlugin = function() {
 let entryHtml = glob.sync(PAGE_PATH + '/*/*.html')
 let arr = []
 entryHtml.forEach((filePath) => {
 let jsPath = '', tmp = [];
 let filename = filePath.substring(filePath.lastIndexOf('\/') + 1, filePath.lastIndexOf('.'))
 tmp = filePath.split('/').splice(-4)
 jsPath = tmp[2] + '/' + 'index'
 let conf = {
  template: filePath,
  filename: filename + '.html',
  chunks: ['manifest', 'vendors', jsPath],
  inject: true
 }
 if (process.env.NODE_ENV === 'production') {
  conf = merge(conf, {
  minify: {
   removeComments: true,
   collapseWhitespace: true,
   removeAttributeQuotes: true
  },
  chunksSortMode: 'dependency'
  })
 }
 arr.push(new HtmlWebpackPlugin(conf))
 })
 return arr
}
step2 修改webpack.base.conf.js文件配置的入口
// entry: {
// app: './src/main.js'
// },
entry: utils.entries(),
step3 修改webpack.dev.conf.js文件的打包方法 找到下面的代码,将其注释掉:
new HtmlWebpackPlugin({
 filename: 'index.html',
 template: 'index.html',
 inject: true
}),
Copy after login

Add our above method after the plugins attribute value. The following is the code snippet:

// new HtmlWebpackPlugin({
 // filename: 'index.html',
 // template: 'index.html',
 // inject: true
 // }),
 new FriendlyErrorsPlugin()
 ].concat(utils.htmlPlugin())
step4 修改webpack.prod.conf.js 找到下面的代码,注释掉:
new HtmlWebpackPlugin({
filename: config.build.index,
template: 'index.html',
inject: true,
minify: {
 removeComments: true,
 collapseWhitespace: true,
 removeAttributeQuotes: true
 // more options:
 // https://github.com/kangax/html-minifier#options-quick-reference
},
// necessary to consistently work with multiple chunks via CommonsChunkPlugin
chunksSortMode: 'dependency'
}),
Copy after login

Add our above method after the plugins attribute value. The following is the code snippet:

new CopyWebpackPlugin([{
  from: path.resolve(__dirname, '../static'),
  to: config.build.assetsSubDirectory,
  ignore: ['.*']
 }])
 ].concat(utils.htmlPlugin())
Copy after login

Configuration completed. Just start the project normally.

The above is what I compiled for everyone. I hope it will be helpful to everyone in the future.

Related articles:

How to achieve the animation effect of bouncing off the edge in jQuery?

How to solve the problem that Vue cannot detect changes in arrays or objects?

What are the methods to add new properties of objects to the detection sequence in vue?

The above is the detailed content of How to use cli to reconstruct multi-page scaffolding in vue. For more information, please follow other related articles on the PHP Chinese website!

Related labels:
vue
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template