使用 Webpack3.X 搭建Vue多页应用开发环境

1.上图,晒一下我的目录结构.

目录

这个结构里面还有很多细节的没有完善,但是整体的结构就这样. 使用 npm init 初始化目录.

2.使用webpack打包多个页面

很多人都有一个认知误区,认为Vue+Webpack都是用来做单页应用(spa, 请注意单页应用不等于只有一个界面的应用.) webpack也可以用来打包多页应用.
首先我们了解一下webpack的基本的配置

{
entry: 入口文件,
output: {
path: 出口目录
filename: 打包后文件名
},
module: {
rules: 各种处理模块
},
plugins: [ 各种插件 ]
}

当我们想打包多页面时就意味着在入口文件我们要传入多个文件路径.
以两个页面为例子.

入口

在出口我们就不能直接设置一个固定的名称,可以使用[name], 即原来文件的名称.
打包后的文件统一放到 build 文件夹下,这里是 js 文件, 我们放到 build 文件夹下 js 文件夹.

出口

(注: __dirname 是nodejs一个全局变量, 表示在全局下的当前路径.)

这里处理完 js , 我们还需要处理 html 文件, 并将 js 以及 css 引用到页面.
下面我们使用一个插件 html-webpack-plugin 进行 html 的处理.

首先是安装

npm install -D html-webpack-plugin (这个插件webpack4.0已经改了, 我这里用的是webpack3.10.0)

在 webpack.config.js 中引入

const HtmlWebpackPlugin = require('html-webpack-plugin');

插件要在 plugins 属性中配置

plugins配置

到这里我们就能打包并输出两个页面文件

打包后的index

可以看到打包后的 index.html 引入了打包后的 index.js 文件并且还添加了哈希值.

但是, 这只是两个页面,如果是10个页面,100个页面,那我们是不是要在 entry 与 plugins 中写10个100个相同的配置呢? 所以我们可以采用函数化处理.
我们这里用到 node 的 glob 包, glob.sync()方法能获得传入目录下的所有文件,并返回一个数组.
在 api.js 中 我们写一个函数 getView 用于处理 js 与 html 文件

api

定义一个常量 FILE_PATH 用于存放需要查找的文件路径, 便于后期维护修改.只需要改一处地方
将得到的入口文件 entrys 以及模板文件 templates 导出.
这里的 entrys 是
{
index: './src/pages/index/index.js',
login: './src/pages/login/login.js'
}
哇! 这跟我们上面写的 entry 一模一样, 这样哪怕后期添加更多的页面我们也不需要去改动 webpack.config.js 中的 entry 配置.
templates 是
{
index: './index.html',
login: './login.html'
}

我们在 webpack.config.js 中引入 api.js

引入api

直接赋值给 entry

赋值entry

我们要对 TEMPLATES 进行一些处理,我们不需要 " ./ "

处理TEMPLATES

3.配置Vue开发环境.

安装一些依赖包
npm install -D vue vue-loader vue-style-loader vue-html-style vue-compiler
(注: vue-loader 现在安装的话都15.0.3版本 ,会出现vue-loader was used without the corresponding plugin.。然后 我也不知道什么原因,我就把版本号改为14.0.3 了就ok了。)
因为我习惯使用 less 进行开发, 所以还需要安装一些依赖包
npm install -D less less-loader style-loader css-loader
(注: 使用时有先后顺序的, loader的运行顺序是从右往左. loaders: 'style-loader ! css-loader ! less-loader') 先用 less-loader 编译成 css, 再用 css-loader 使 css 文件能以 import ' ' 或者 require('') 方式引入, 最后是 style-loader 将 css 插件页面中

我不想把 css 文件一起打包进 js 中,我希望 css 文件能单独打包在一个文件夹里.于是我使用了 extract-text-webpack-plugin. 跟上面我们使用其他插件一样, 要先安装然后引入.

css分离

这里的 [name] 并不是 原来 css 文件名, 而是被哪个 js 文件引入那个 js 文件的名.因为我们在使用 html-webpack-plugin 插件时用了 hash, 所以不用担心 css 文件会重名.

完整配置

记得最后要导出 config;
module.exports = config

今天先写到这, 下次再继续更新.,,还要配 devServer 以及 实时刷新等.
希望大家共同学习, 一起进步

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,670评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,928评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,926评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,238评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,112评论 4 356
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,138评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,545评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,232评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,496评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,596评论 2 310
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,369评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,226评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,600评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,906评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,185评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,516评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,721评论 2 335

推荐阅读更多精彩内容