有关webpack项目配置

本篇文章主要介绍了详解webpack编译多页面vue项目的配置问题,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

 本文主要介绍了webpack编译多页面vue项目的配置问题,分享给大家,具体如下:

一般情况下,构建一个vue项目的步骤为:

1,安装nodejs环境

2,安装vue-cli

cnpm install vue-cli -g

登录后复制

3,构建vue项目

vue init webpack-simple vue-cli-multipage-demo

登录后复制

4, 安装项目依赖包

cnpm install

登录后复制

5,在开发环境下运行该项目:

npm run dev

登录后复制

通过上面这几步一个简单的vue项目的开发环境基本就搭建起来,接下来的工作就是填代码了。

最近在做一个前端代码重构的时候发现一个问题,使用这个脚手架构建的项目满足不了我的需求,其实这个需求有一点违背我们vue的初衷的,vue开发的是单页面应用(SPA),这里我需要他实现多页面的效果。什么意思呢?举个例子:我们在网页开发的时候,有时候点击一个连接,浏览器会新代开一个tab页来显示我们的内容,这个时候其实就出现多页面的情况了,新开的这个页面其实已经不属于我们之前的那个页面,(SPA)其实是通过路由的方式,让多个页面在主页面中显示。但是这个时候新开的页面已经脱离主页面了。

通过vue-cli脚手架构建的项目的webpack配置文件支持单页面的应用开发,他只有一个入口文件。而且最后只会生产一个页面。如何才能满足我的需求,让webpack同时便于多个页面呢,其实还是比较简单的,只需要将webpack稍微改装一下,就完全可以了。

首先我们需要在build文件下的utils.js文件家中增加一个获取文件夹中文件路径的方法,这个方法将目标文件解析成对象的形式。
utils.js

var glob = require("glob");//分析文件夹中文件路径的第三方模块exports.getEntry = function(globPath) { var entries = {}, basename, tmp, pathname; if (typeof (globPath) != "object") { globPath = [globPath] } globPath.forEach((itemPath) => { glob.sync(itemPath).forEach(function (entry) {  basename = path.basename(entry, path.extname(entry));  if (entry.split('/').length > 4) {  tmp = entry.split('/').splice(-3);  pathname = tmp.splice(0, 1) + '/' + basename; // 正确输出js和html的路径  entries[pathname] = entry;  } else {  entries[basename] = entry;  } }); }); return entries;}

登录后复制

然后修改wenpack.base.conf.js文件,修改入口文件,原来的文件是单文件,现在需要将单文件入口改成多文件入口了。

webpack.dev.conf.js

var path = require('path')var config = require('../config')var utils = require('./utils')var projectRoot = path.resolve(__dirname, '../')var glob = require('glob');var entries = utils.getEntry(['./src/module/**/*.js']); // 获得多页面的入口js文件var env = process.env.NODE_ENV// various preprocessor loaders added to vue-loader at the end of this filevar cssSourceMapDev = (env === 'development' && config.dev.cssSourceMap)var cssSourceMapProd = (env === 'production' && config.build.productionSourceMap)var useCssSourceMap = cssSourceMapDev || cssSourceMapProdmodule.exports = { entry: entries,//这是通过前面新增的方法获取的文件路径对象 output: { path: config.build.assetsRoot, publicPath: process.env.NODE_ENV === 'production' ? config.build.assetsPublicPath : config.dev.assetsPublicPath, filename: '[name].js' } ...}

登录后复制

下面需要修改webpack.dev,conf.js文件了,这里主要是修改原来配置的首页,这里需要配置多个页面

webpack.dev.conf.js

var path = require('path');var config = require('../config')var webpack = require('webpack')var merge = require('webpack-merge')var utils = require('./utils')var baseWebpackConfig = require('./webpack.base.conf')var HtmlWebpackPlugin = require('html-webpack-plugin')Object.keys(baseWebpackConfig.entry).forEach(function (name) { baseWebpackConfig.entry[name] = ['./build/dev-client'].concat(baseWebpackConfig.entry[name])})module.exports = merge(baseWebpackConfig, { ...});//新增var pages =utils.getEntry(['./src/module/*.html','./src/module/**/*.html']);for (var pathname in pages) { // 配置生成的html文件,定义路径等 var conf = { filename: pathname + '.html', template: pages[pathname], // 模板路径 inject: true,    // js插入位置 chunksSortMode: 'dependency' }; if (pathname in module.exports.entry) { conf.chunks = ['manifest', 'vendor', pathname]; conf.hash = true; } module.exports.plugins.push(new HtmlWebpackPlugin(conf));}

登录后复制

这里这要是改变了new HtmlWebpackPlugin的conf对象,原来的配置的是单个html,现在通过循环pages对象,生成多个html配置对象。

通过上面的配置,当我们执行npm run dev 的时候,webpack就可以同时便于多个页面,然后将前面wenpack.base.conf.js中配置的js文件,插入到对应的html页面中。

这个时候我们运行项目npm run dev 然后我们就可以访问不同的页面了,这里需要注意一下,既然我们需要管理多个页面,我们就应该在src下建立一个目录专门来访放不同的页面。这样项目结构看起来更加清晰,便于维护。

这是我写的一个demo地址,有兴趣的可以拉下来看看vue-cli-multi-page

运行起来后访问http://localhost:8080/module/index.html,然后点击按钮,打开新页面。

上面这样配置只是开发环境,最后生产环境的配置文件webpack.prod.conf.js也需要修改,这样在生产打包的时候就可以同时在dist中生成多个html文件。

webpack.prod.conf:

var path = require('path')var config = require('../config')var utils = require('./utils')var webpack = require('webpack')var merge = require('webpack-merge')var baseWebpackConfig = require('./webpack.base.conf')var ExtractTextPlugin = require('extract-text-webpack-plugin')var HtmlWebpackPlugin = require('html-webpack-plugin')var CleanPlugin = require('clean-webpack-plugin')//webpack插件,用于清除目录文件var env = config.build.envvar webpackConfig = merge(baseWebpackConfig, {...}//这里是修改的部分,和webpack.dev.conf.js的修改是一样的module.exports = webpackConfigvar pages =utils.getEntry(['./src/module/**/*.html']);for (var pathname in pages) { // 配置生成的html文件,定义路径等 var conf = { filename: pathname + '.html',//生成 html 文件的文件名 template: pages[pathname], // 根据自己的指定的模板文件来生成特定的 html 文件。这里的模板类型可以是任意你喜欢的模板,可以是 html, jade, ejs, hbs, 等等,但是要注意的是,使用自定义的模板文件时,需要提前安装对应的 loader, inject: true,    // 注入选项。有四个选项值 true, body, head, false.true:默认值,script标签位于html文件的 body 底部,body:同 true,head:script 标签位于 head 标签内,false:不插入生成的 js 文件,只是单纯的生成一个 html 文件 // necessary to consistently work with multiple chunks via CommonsChunkPlugin chunksSortMode: 'dependency' }; if (pathname in module.exports.entry) { conf.chunks = ['manifest', 'vendor', pathname]; conf.hash = true; } module.exports.plugins.push(new HtmlWebpackPlugin(conf));}

登录后复制

上面是我整理给大家的,希望今后会对大家有帮助。

相关文章:

在vuejs中使用模块化的方式开发

在vuejs中使用模块化的方式开发

在vuejs中使用模块化的方式开发

以上就是有关webpack项目配置的详细内容,更多请关注【创想鸟】其它相关文章!

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

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

(0)
上一篇 2025年3月8日 05:06:46
下一篇 2025年3月2日 00:15:51

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

相关推荐

  • 在webpack中有关生成代码探索

    本篇文章主要介绍了浅谈webpack编译vue项目生成的代码探索,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧 本文介绍了webpack编译vue项目生成的代码探索,分享给大家,具体如下: 前言 往 main.…

    2025年3月8日
    200
  • 在vue中使用v-model如何实现父子组件通信

    vue.js,是一个构建数据驱动的 web 界面的库。vue.js 的目标是通过尽可能简单的 api 实现响应的数据绑定和组合的视图组件。下面这篇文章主要给大家介绍了关于vue项目中v-model父子组件通信实现的相关资料,需要的朋友可以参…

    2025年3月8日
    200
  • 使用Vue如何制作自定义全局组件

    这两天学习了vue.js 感觉组件这个地方知识点挺多的,而且很重要,所以这篇文章主要给大家介绍了关于vue中自定义全局组件的实现方法,文中通过示例代码介绍的非常详细,对大家学习或者使用vue具有一定的参考学习价值,需要的朋友们下面随着小编来…

    编程技术 2025年3月8日
    200
  • 有关Vue配置指南(详细教程)

    vux是vue.js的一个ui库,官网在这里,官方文档的配置指南侧重于技术的罗列,我这里简化一下vux的配置流程。感兴趣的朋友跟随脚本之家小编一起学习吧 简介 Vux(读音 [v’ju:z],同views)是基于WeUI和Vue…

    编程技术 2025年3月8日
    200
  • 在vue中如何实现axios二次封装

    本篇文章主要介绍了vue axios 二次封装的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧 这段时间告诉项目需要,用到了vue。 刚开始搭框架的时候用的是vue-resource后面看到官方推荐ax…

    编程技术 2025年3月8日
    200
  • 如何通过全局方法使用Vue.use()组件

    本篇文章主要介绍了vue自定义全局组件并通过全局方法 vue.use() 使用该组件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 简介 Vue.use( plugin ):安装 Vue.js 插件。如果插件是一个对象,必须提供 ins…

    编程技术 2025年3月8日
    200
  • 在vue中如何使用路由参数传递

    这篇文章主要给大家介绍了关于vue中路由参数传递遇到的坑的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。 前言 vue中路由跳转传参数有多种,自己常用的是下面…

    编程技术 2025年3月8日
    200
  • 在Vue中如何控制全局console.log开关

    这篇文章主要给大家介绍了关于vue根据url传参如何控制全局console.log开关的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起看看吧。 前言 最近在学习vue,发现了一个…

    编程技术 2025年3月8日
    200
  • 使用Vue如何制作组织架构树组件

    最近公司在做一个基于vue开发的项目,项目需要开发一个展示组织架构的树组件,在网上搜了半天,没有找到合适的,下面小编给大家分享一个基于vue制作组织架构树组件,需要的朋友参考下吧 由于公司业务需求,需要开发一个展示组织架构的树组件(公司的项…

    2025年3月8日 编程技术
    200
  • 使用vue如何制作Tab组件

    这篇文章主要给大家介绍了关于利用vue组件自定义v-model实现一个tab组件的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。 前言 最近在学习vue,今天…

    2025年3月8日
    200

发表回复

登录后才能评论