如何使用vue配置多页面

这次给大家带来如何使用vue配置多页面,使用vue配置多页面的注意事项有哪些,下面就是实战案例,一起来看一下。

1.安装环境

①安装node.js 并添加入环境变量PATH

②安装淘宝NPM镜像

$ npm install -g cnpm --registry=https://registry.npm.taobao.org

登录后复制

③安装webpack

npm install webpack -g

登录后复制

④安装vue-cli脚手架

npm install -g vue-cli

登录后复制

⑤创建项目模板 vue init wepack vue-multipage-demo

⑥cmd进入到要放项目的文件夹

⑦安装 cnpm install

2.目录结构调整

如何使用vue配置多页面如何使用vue配置多页面

3.配置文件修改

①添加依赖 glob (返回目录中的所有子文件)

npm install glob

登录后复制

②修改build文件夹中的utils.js文件

//新增代码var glob = require('glob');// 页面模板var HtmlWebpackPlugin = require('html-webpack-plugin');// 取得相应的页面路径,因为之前的配置,所以是src文件夹下的pages文件夹var PAGE_PATH = path.resolve(dirname, '../src/pages');// 用于做相应的merge处理var merge = require('webpack-merge');//多入口配置// 通过glob模块读取pages文件夹下的所有对应文件夹下的js后缀文件,如果该文件存在// 那么就作为入口处理exports.entries = function () { var entryFiles = glob.sync(PAGE_PATH + '/*/*.js') var map = {} entryFiles.forEach((filePath) => {  var filename = filePath.substring(filePath.lastIndexOf('/') + 1, filePath.lastIndexOf('.'))  map[filename] = filePath }) return map}//多页面输出配置// 与上面的多页面入口配置相同,读取pages文件夹下的对应的html后缀文件,然后放入数组中exports.htmlPlugin = function () { let entryHtml = glob.sync(PAGE_PATH + '/*/*.html') let arr = [] entryHtml.forEach((filePath) => {  let filename = filePath.substring(filePath.lastIndexOf('/') + 1, filePath.lastIndexOf('.'))  let conf = {   // 模板来源   template: filePath,   // 文件名称   filename: filename + '.html',   // 页面模板需要加对应的js脚本,如果不加这行则每个页面都会引入所有的js脚本   chunks: ['manifest', 'vendor', filename],   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}

登录后复制

③修改webpack.base.conf.js文件

function resolve (dir) { return path.join(dirname, '..', dir)}const createLintingRule = () => ({ test: /.(js|vue)$/, loader: 'eslint-loader', enforce: 'pre', include: [resolve('src'), resolve('test')], options: { formatter: require('eslint-friendly-formatter'), emitWarning: !config.dev.showEslintErrorsInOverlay }})module.exports = { context: path.resolve(dirname, '../'),//注释代码开始 // entry: { // app: './src/main.js' // },//注释代码结束//新增代码开始 entry: utils.entries(),//新增代码结束 output: { path: config.build.assetsRoot, filename: '[name].js', publicPath: process.env.NODE_ENV === 'production'  ? config.build.assetsPublicPath  : config.dev.assetsPublicPath }, resolve: { extensions: ['.js', '.vue', '.json'], alias: {  'vue$': 'vue/dist/vue.esm.js',  '@': resolve('src'), } }, module: { rules: [  ...(config.dev.useEslint ? [createLintingRule()] : []),  {  test: /.vue$/,  loader: 'vue-loader',  options: vueLoaderConfig  },  {  test: /.js$/,  loader: 'babel-loader',  include: [resolve('src'), resolve('test'), resolve('node_modules/webpack-dev-server/client')]  },  {  test: /.(png|jpe?g|gif|svg)(?.*)?$/,  loader: 'url-loader',  options: {   limit: 10000,   name: utils.assetsPath('img/[name].[hash:7].[ext]')  }  },  {  test: /.(mp4|webm|ogg|mp3|wav|flac|aac)(?.*)?$/,  loader: 'url-loader',  options: {   limit: 10000,   name: utils.assetsPath('media/[name].[hash:7].[ext]')  }  },  {  test: /.(woff2?|eot|ttf|otf)(?.*)?$/,  loader: 'url-loader',  options: {   limit: 10000,   name: utils.assetsPath('fonts/[name].[hash:7].[ext]')  }  } ] }, node: { // prevent webpack from injecting useless setImmediate polyfill because Vue // source contains it (although only uses it if it's native). setImmediate: false, // prevent webpack from injecting mocks to Node native modules // that does not make sense for the client dgram: 'empty', fs: 'empty', net: 'empty', tls: 'empty', child_process: 'empty' }}

登录后复制

④修改webpack.dev.conf.js文件

 plugins: [ new webpack.DefinePlugin({  'process.env': require('../config/dev.env') }), new webpack.HotModuleReplacementPlugin(), new webpack.NamedModulesPlugin(), // HMR shows correct file names in console on update. new webpack.NoEmitOnErrorsPlugin(), // https://github.com/ampedandwired/html-webpack-plugin //多页面输出配置 //注释代码开始  // new HtmlWebpackPlugin({  // filename: 'index.html',  // template: 'index.html',  // inject: true  // }), //注释代码结束 // copy custom static assets new CopyWebpackPlugin([  {  from: path.resolve(dirname, '../static'),  to: config.dev.assetsSubDirectory,  ignore: ['.*']  } ]) //新增代码开始 ].concat(utils.htmlPlugin()) //新增代码结束})

登录后复制

⑤修改webpack.prod.conf.js文件

   'use strict' const path = require('path') const utils = require('./utils') const webpack = require('webpack') const config = require('../config') const merge = require('webpack-merge') const baseWebpackConfig = require('./webpack.base.conf') const CopyWebpackPlugin = require('copy-webpack-plugin') const HtmlWebpackPlugin = require('html-webpack-plugin') const ExtractTextPlugin = require('extract-text-webpack-plugin') const OptimizeCSSPlugin = require('optimize-css-assets-webpack-plugin') const UglifyJsPlugin = require('uglifyjs-webpack-plugin') const env = process.env.NODE_ENV === 'testing'  ? require('../config/test.env')  : require('../config/prod.env') const webpackConfig = merge(baseWebpackConfig, {  module: {  rules: utils.styleLoaders({   sourceMap: config.build.productionSourceMap,   extract: true,   usePostCSS: true  })  },  devtool: config.build.productionSourceMap ? config.build.devtool : false,  output: {  path: config.build.assetsRoot,  filename: utils.assetsPath('js/[name].[chunkhash].js'),  chunkFilename: utils.assetsPath('js/[id].[chunkhash].js')  },  plugins: [  // http://vuejs.github.io/vue-loader/en/workflow/production.html  new webpack.DefinePlugin({   'process.env': env  }),  new UglifyJsPlugin({   uglifyOptions: {   compress: {    warnings: false   }   },   sourceMap: config.build.productionSourceMap,   parallel: true  }),  // extract css into its own file  new ExtractTextPlugin({   filename: utils.assetsPath('css/[name].[contenthash].css'),   // Setting the following option to `false` will not extract CSS from codesplit chunks.   // Their CSS will instead be inserted dynamically with style-loader when the codesplit chunk has been loaded by webpack.   // It's currently set to `true` because we are seeing that sourcemaps are included in the codesplit bundle as well when it's `false`,    // increasing file size: https://github.com/vuejs-templates/webpack/issues/1110   allChunks: true,  }),  // Compress extracted CSS. We are using this plugin so that possible  // duplicated CSS from different components can be deduped.  new OptimizeCSSPlugin({   cssProcessorOptions: config.build.productionSourceMap   ? { safe: true, map: { inline: false } }   : { safe: true }  }),  // generate dist index.html with correct asset hash for caching.  // you can customize output by editing /index.html  // see https://github.com/ampedandwired/html-webpack-plugin  //注释代码开始  // new HtmlWebpackPlugin({  // filename: process.env.NODE_ENV === 'testing'  //  ? 'index.html'  //  : 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'  // }),  //注释代码结束  // keep module.id stable when vendor modules does not change  new webpack.HashedModuleIdsPlugin(),  // enable scope hoisting  new webpack.optimize.ModuleConcatenationPlugin(),  // split vendor js into its own file  new webpack.optimize.CommonsChunkPlugin({   name: 'vendor',   minChunks (module) {   // any required modules inside node_modules are extracted to vendor   return (    module.resource &&    /.js$/.test(module.resource) &&    module.resource.indexOf(    path.join(dirname, '../node_modules')    ) === 0   )   }  }),  // extract webpack runtime and module manifest to its own file in order to  // prevent vendor hash from being updated whenever app bundle is updated  new webpack.optimize.CommonsChunkPlugin({   name: 'manifest',   minChunks: Infinity  }),  // This instance extracts shared chunks from code splitted chunks and bundles them  // in a separate chunk, similar to the vendor chunk  // see: https://webpack.js.org/plugins/commons-chunk-plugin/#extra-async-commons-chunk  new webpack.optimize.CommonsChunkPlugin({   name: 'app',   async: 'vendor-async',   children: true,   minChunks: 3  }),  // copy custom static assets  new CopyWebpackPlugin([   {   from: path.resolve(dirname, '../static'),   to: config.build.assetsSubDirectory,   ignore: ['.*']   }  ])  //修改代码开始   ].concat(utils.htmlPlugin())  //修改代码结束 }) if (config.build.productionGzip) {  const CompressionWebpackPlugin = require('compression-webpack-plugin')  webpackConfig.plugins.push(  new CompressionWebpackPlugin({   asset: '[path].gz[query]',   algorithm: 'gzip',   test: new RegExp(   '\.(' +   config.build.productionGzipExtensions.join('|') +   ')$'   ),   threshold: 10240,   minRatio: 0.8  })  ) } if (config.build.bundleAnalyzerReport) {  const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin  webpackConfig.plugins.push(new BundleAnalyzerPlugin()) } module.exports = webpackConfig

登录后复制

相信看了本文案例你已经掌握了方法,更多精彩请关注【创想鸟】其它相关文章!

推荐阅读:

如何进行Angular网络请求封装

如何实现vue input输入框模糊查询

以上就是如何使用vue配置多页面的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2755554.html

(0)
上一篇 2025年3月8日 07:17:56
下一篇 2025年2月23日 15:26:04

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • js类型判断使用详解

    这次给大家带来js类型判断使用详解,js类型判断使用的注意事项有哪些,下面就是实战案例,一起来看一下。 js类型转换中typeof会将null也识别为object, 而且返回的类型比少,我们用Object.prototype.toStrin…

    编程技术 2025年3月8日
    200
  • vue组件jsx语法使用步奏详解

    这次给大家带来vue组件jsx语法使用步奏详解,vue组件jsx语法使用的注意事项有哪些,下面就是实战案例,一起来看一下。 配置 需要用到babel插件 安装 npm install babel-plugin-syntax-jsx babe…

    编程技术 2025年3月8日
    200
  • 怎样使用ESlint

    这次给大家带来怎样使用ESlint,使用ESlint的注意事项有哪些,下面就是实战案例,一起来看一下。 1. 什么是ESlint? ESLint 是一个ECMAScript/JavaScript 语法规则和代码风格的检查工具,它的目标是保证…

    2025年3月8日 编程技术
    200
  • 怎样使用vue内diff算法

    这次给大家带来怎样使用vue内diff算法,使用vue内diff算法的注意事项有哪些,下面就是实战案例,一起来看一下。 1. 当数据发生变化时,vue是怎么更新节点的? 要知道渲染真实DOM的开销是很大的,比如有时候我们修改了某个数据,如果…

    2025年3月8日 编程技术
    200
  • 怎样对vuex进阶使用

    这次给大家带来怎样对vuex进阶使用,对vuex进阶使用的注意事项有哪些,下面就是实战案例,一起来看一下。 一、 Getter 我们先回忆一下上一篇的代码 computed:{ getName(){ return this.$store.s…

    编程技术 2025年3月8日
    200
  • 怎样使vue项目刷新页面

    这次给大家带来怎样使vue项目刷新页面,使vue项目刷新页面的注意事项有哪些,下面就是实战案例,一起来看一下。 1.场景 在处理列表时,常常有删除一条数据或者新增数据之后需要重新刷新当前页面的需求。 2.遇到的问题 1. 用vue-rout…

    2025年3月8日
    200
  • 怎样实现微信小程序使用form表单获取输入框数据

    这次给大家带来怎样实现微信小程序使用form表单获取输入框数据,实现微信小程序使用form表单获取输入框数据的注意事项有哪些,下面就是实战案例,一起来看一下。 1、效果展示 2、关键代码 index.wxml 用户名: 密码: 登录 重置 …

    2025年3月8日
    200
  • 怎样使用ES6模版字符串

    这次给大家带来怎样使用ES6模版字符串,使用ES6模版字符串的注意事项有哪些,下面就是实战案例,一起来看一下。 1.之前我们也可以使用JavaScript输出模版字符串,通常是下面这样的: $(“#result”).append( “He …

    2025年3月8日 编程技术
    200
  • 怎样使用Vue中字符串模板

    这次给大家带来怎样使用Vue中字符串模板,使用Vue中字符串模板的注意事项有哪些,下面就是实战案例,一起来看一下。 1、HTML模板和字符串模板 HTML模板:直接在HTML页面挂载的模板。(即非字符串模板) 非字符串模板:在单文件里用 指…

    编程技术 2025年3月8日
    200
  • 怎样使用Point事件

    这次给大家带来怎样使用Point事件,使用Point事件的注意事项有哪些,下面就是实战案例,一起来看一下。 前言 这篇文章在草稿箱里躺了很久,因为最近又遇到了相关问题,于是又整理了一下。请注意这里讲的不是 css 的 pointer-eve…

    2025年3月8日
    200

发表回复

登录后才能评论