入口文件entry 配置

/*

例子:

项目目录结构:

  1. ├─src # 当前项目的源码
  2. ├─pages # 各个页面独有的部分,如入口文件、只有该页面使用到的css、模板文件等
  3. ├─alert # 业务模块
  4. └─index # 具体页面
  5. ├─index # 业务模块
  6. ├─index # 具体页面
  7. └─login # 具体页面
  1. */
  2.  
  3. var path = require('path');
  4. var glob = require('glob');
  1. var option = {
  2. cwd: path.resolve(__dirname, './src/pages'),
  3. sync: true // 这里不能异步,只能同步
  4. }
  5. var globInstance = new glob.Glob('!(_)*/!(_)*', options);
  6.  
  7. var pageArr = globInstance.found;//一个数组,形如['index/index', 'index/login', 'alert/index']
  8. //每一个入口文件都相当于entry里的一项,因此这样一项一项地来写实在是有点繁琐,使用 glob 模块读取目录结构,拼接项目页面输出
  9. var configEntry = {};
  10. pageArr.forEach((page) => {
  11. configEntry[page] = path.resolve(dirVars.pagesDir, page + '/page');
  12. });
  1. // configEntry = {
  2. // 'alert/index': './src/pages/alert/index/page',
  3. // 'user/index': './src/pages/user/index/page',
  4. // 'index/index': './src/pages/index/index/page'
  5. // }
  1. module.exports = { entry: configEntry}

输出文件:output参数

例子:

  1. var configOutput = {
  2. path: path.resolve(__dirname, './build'),
  3. publicPath: '/',
  4. filename: '[name]/entry.js',
  5. chunkFilename: '[id].bundle.js',
  6. };
  1. module.exports = { output: configOutput}

output参数告诉webpack以什么方式来生成/输出文件 , output相当于一套规则,所有的入口都必须使用这一套规则  , 不能针对某一个特定的入口来制定output规则。output参数里有这几个子参数是比较常用的:path、publicPath、filename、chunkFilename

  • path

path参数表示生成文件的根目录,需要传入一个绝对路径。  path参数和后面的filename参数共同组成入口文件的完整路径

  • publicPath

  1. publicPath参数表示的是一个URL路径 , 用于生成css/js/图片/字体文件等资源的路径,以确保网页能正确地加载到这些资源
  2. publicPath参数跟path参数的区别是:path参数其实是针对本地文件系统的,而publicPath则针对的是浏览器;
  3. publicPath既可以是一个相对路径,如示例中的'../../../../build/',也可以是一个绝对路径如http://www.xxxxx.com/
  4. 如果遇到在开发环境加载图片可以显示,生产环境就加载失败的情况,可能是没有配置publicPath
  • filename

filename属性表示的是如何命名生成出来的入口文件,规则有以下三种:

  1. [name],指代入口文件的name,也就是上面提到的entry参数的key,因此,我们可以在name里利用/,即可达到控制文件目录结构的效果
  2. [hash] ,指代本次编译的一个hash版本,只要是在同一次编译过程中生成的文件,这个[hash]的值就是一样的;在缓存的层面来说,相当于一次全量的替换
  3. [chunkhash],指代的是当前chunk的一个hash版本,也就是说,在同一次编译中,每一个chunk的hash都是不一样的;而在两次编译中,如果某个chunk根本没有发生变化,那么该chunk的hash也就不会发生变化。这在缓存的层面上来说,就是把缓存的粒度精细到具体某个chunk,只要chunk不变,该chunk的浏览器缓存就可以继续使用。
  • chunkFilename

chunkFilename参数与filename参数类似,都是用来定义生成文件的命名方式的,只不过,chunkFilename参数指定的是除入口文件外的chunk的命名(这些chunk通常是由于webpack对代码的优化所形成的,比如因应实际运行的情况来异步加载)

例如:如果使用了插件 webpack.optimize.CommonsChunkPlugin 抽取所有通用的js部分,该插件就会生成一个公共的js 文件,chunkFilename就是设置 输入的文件名

例中的 对于key为'index/login'的入口文件,生成出来的路径就是build/index/login/entry.js

module 配置

webpack拥有一个类似于插件的机制,名为Loader,通过Loader,webpack能够针对每一种特定的资源做出相应的处理

  • test参数用来指示当前配置项针对哪些资源,该值应是一个条件值(condition)。

  • exclude参数用来剔除掉需要忽略的资源,该值应是一个条件值(condition)。

  • include参数用来表示本loader配置仅针对哪些目录

  • loader/loaders参数,用来指示用哪个/哪些loader来处理目标资源,这俩货表达的其实是一个意思,只是写法不一样,用loader写成一行,多个loader间使用!分割,形如loader: 'css?!postcss!less',目标资源先经less-loader处理过后将结果交给postcss-loader作进一步处理,然后最后再交给css-loader。

例子:生产的配置var dirVars = require('../base/dir-vars.config.js');

  1. var eslintFormatter = require('eslint-friendly-formatter');
  2. module.exports = {
  3. rules: [
  4. // eslint 代码检查
  5. {
  6. test: /\.js$/,
  7. enforce: 'pre',
  8. loader: 'eslint-loader',
  9. include: dirVars.srcRootDir,
  10. exclude: /bootstrap/,
  11. options: {
  12. formatter: eslintFormatter,
  13. fix: true,
  14. }
  15. },
  16. // es6转换
  17. {
  18. test: /\.js$/,
  19. include: dirVars.srcRootDir,
  20. loader: 'babel-loader',
  21. options: {
  22. presets: [['es2015', { loose: true }]],
  23. // 参数默认为false ,则相当于开启cache。这里的cache指的是babel在编译过程中某些可以缓存的步骤
  24. cacheDirectory: true,
  25. // ,不用这transform-runtime ,babel会为每一个转换后的文件 添加一些辅助的方法;       // 用了这个plugin,babel会把这些辅助的方法都集中到一个文件里统一加载统一管理,       plugins: ['transform-runtime']
  26. },
  27. },
  28. {
  29. test: /\.html$/,
  30. include: dirVars.srcRootDir,
  31. loader: 'html-loader',
  32. },
  33. // ejs
  34. {
  35. test: /\.ejs$/,
  36. include: dirVars.srcRootDir,
  37. loader: 'ejs-loader',
  38. },
  39. // 图片加载器,雷同file-loader,更适合图片,可以将较小的图片转成base64 ; 如下配置,将小于8192byte的图片转成base64码
  40. {
  41. test: /\.(png|jpg|gif)$/,
  42. include: dirVars.srcRootDir,
  43. loader: 'url-loader',
  44. options: {
  45. limit: 8192,
  46. name: './static/img/[hash].[ext]',
  47. },
  48. },
  49. // 专供bootstrap方案使用的,忽略bootstrap自带的字体文件
  50. {
  51. test: /\.(woff|woff2|svg|eot|ttf)$/,
  52. include: /glyphicons/,
  53. loader: 'null-loader',
  54. },
  55. // 专供iconfont方案使用的,后面会带一串时间戳,需要特别匹配到
  56. {
  57. test: /\.(woff|woff2|svg|eot|ttf)\??.*$/,
  58. include: dirVars.srcRootDir,
  59. loader: 'file-loader',
  60. options: {
  61. name: 'static/fonts/[name].[ext]',
  62. },
  63. },
  64. // 使用 extract-text-webpack-plugin就可以把css从js中独立抽离出来
  65. {
  66. test: /\.css$/,
  67. exclude: /node_modules|bootstrap/,
  68. // loader: ExtractTextPlugin.extract('css?minimize&-autoprefixer!postcss'),
  69. use: ExtractTextPlugin.extract([
  70. {
  71. loader: 'css-loader',
  72. options: {
  73. minimize: true, // 代码压缩
  74. '-autoprefixer': true // 关闭autoprefixer已避免你的废弃CSS代码被css-loader删除了
  75. },
  76. },
  77. {
  78. loader: 'postcss-loader'
  79. },
  80. ])
  81. },
  82. // css
  83. {
  84. test: /\.css$/,
  85. include: /bootstrap/,
  86. use: ExtractTextPlugin.extract([
  87. {
  88. loader: 'css-loader',
  89. }
  90. ])
  91. },
  92. // less
  93. {
  94. test: /\.less$/,
  95. include: dirVars.srcRootDir,
  96. use: ExtractTextPlugin.extract([
  97. {
  98. loader: 'css-loader',
  99. options: {
  100. minimize: true, // 代码压缩
  101. '-autoprefixer': true // 关闭autoprefixer已避免你的废弃CSS代码被css-loader删除了
  102. },
  103. },
  104. {
  105. loader: 'postcss-loader'
  106. },
  107. {
  108. loader: 'less-loader'
  109. }
  110. ])
  111. }
  112. ],
  113. };

webpack-webpackConfig-配置说明-多页面的更多相关文章

  1. 高性能流媒体服务器EasyDSS前端重构(一)-从零开始搭建 webpack + vue + AdminLTE 多页面脚手架

    本文围绕着实现EasyDSS高性能流媒体服务器的前端框架来展开的,具体EasyDSS的相关信息可在:www.easydss.com 找到! EasyDSS 高性能流媒体服务器前端架构概述 EasyDS ...

  2. EasyDSS高性能流媒体服务器前端重构(五)- webpack + vue-router 开发单页面前端实现按需加载 - 副本

    为了让页面更快完成加载, 第一时间呈现给客户端, 也为了帮助客户端节省流量资源, 我们可以开启 vue-router 提供的按需加载功能, 让客户端打开页面时, 只自动加载必要的资源文件, 当客户端操 ...

  3. 高性能流媒体服务器EasyDSS前端重构(三)- webpack + vue + AdminLTE 多页面引入 element-ui

    接上篇 接上篇<高性能流媒体服务器EasyDSS前端重构(二) webpack + vue + AdminLTE 多页面提取共用文件, 优化编译时间> 本文围绕着实现EasyDSS高性能流 ...

  4. 高性能流媒体服务器EasyDSS前端重构(二) webpack + vue + AdminLTE 多页面提取共用文件, 优化编译时间

    本文围绕着实现EasyDSS高性能流媒体服务器的前端框架来展开的,具体EasyDSS的相关信息可在:www.easydss.com 找到! 接上回 <高性能流媒体服务器EasyDSS前端重构(一 ...

  5. 基于webpack实现多html页面开发框架一 准备工作

    本系列主要介绍如何基于webpack实现多html页面开发框架,这里不讲webpack的基本概念,废话不多说,直奔主题! 前置条件: 1.安装node环境,自己去官网下载安装 2.新建文件夹webpa ...

  6. EasyDSS高性能RTMP、HLS(m3u8)、HTTP-FLV、RTSP流媒体服务器前端重构(五)- webpack + vue-router 开发单页面前端实现按需加载

    为了让页面更快完成加载, 第一时间呈现给客户端, 也为了帮助客户端节省流量资源, 我们可以开启 vue-router 提供的按需加载功能, 让客户端打开页面时, 只自动加载必要的资源文件, 当客户端操 ...

  7. Vue+webpack配置实现多页面应用开发

    为什么要配置多页面开发? · 由于单页面应用不利于SEO,对于某些资讯类网站不够友好,而多页面则能够更优的解决此问题. · 传统的多页面开发模式(如java的jsp等) 前后端耦合性大,开发效率低,代 ...

  8. webpack构建react多页面应用

    写这个的初衷是很难找一个简洁的项目脚手架,很多脚手架都有很多依赖,光看依赖就要很久,所以自己参照网上的内容,弄个这么一个简单的多页面的脚手架. 利用creat-react-app 新建一个react应 ...

  9. webpack+react+antd 单页面应用实例

    React框架已经火了好长一段时间了,再不学就out了! 对React还没有了解的同学可以看看我之前的一篇文章,可以快速简单的认识一下React.React入门最好的实例-TodoList 自己从开始 ...

  10. vue cli 构建的 webpack 项目设置多页面

    1. webpack-dev-server下的设置(npm run dev) ./build/webpack.dev.conf.js 中,修改 new HtmlWebpackPlugin ,一个页面一 ...

随机推荐

  1. BZOJ1096 [ZJOI2007]仓库建设(斜率优化)

    题目背景 小B的班级数学学到多项式乘法了,于是小B给大家出了个问题:用编程序来解决多项式乘法的问题. 题目描述 L公司有N个工厂,由高到底分布在一座山上. 工厂1在山顶,工厂N在山脚. 由于这座山处于 ...

  2. 适配器设计模式初探(Java实现)

    本篇随笔主要介绍Java实现设配器设计模式. 先来看下待解决的问题: (图片转自http://blog.csdn.net/jason0539) 由上图的情况可知,欧洲壁式插座只有三足插口,如果我们想要 ...

  3. sql开发技巧总结-1

    1.数据库分类 关系型 非关系型 2.sql语句分类 sql: ddl数据库定义语言  tpl事物处理语言 dcl数据控制语言  dml数据操作语言(insert delete update sele ...

  4. Django 自定义模板标签 报错django.template.exceptions.TemplateSyntaxError: '####' is not a registered tag library. Must be one of:

    我写代码遇到这个错误,但是发现程序没有写错,好像是程序有缓存,重新运行几次就好了. 自定义模板标签,可以不用写views,url直接通过自定义函数把变量传给模板. 具体实现: 1.在app下新建Pyt ...

  5. SP8791 DYNALCA - Dynamic LCA

    \(\color{#0066ff}{ 题目描述 }\) 有一个森林最初由 n (\(1 \le n \le 100000\))n(\(1\leq n\leq 100000\)) 个互不相连的点构成 你 ...

  6. 10.6-10.7 牛客网NOIP模拟赛题解

    留个坑... upd:估计这个坑补不了了 如果还补不了就删了吧

  7. docker 部署net core程序 curl访问地址 提示 Connection reset by peer

    最近研究netcore 部署到docker上.在参考https://www.cnblogs.com/subendong/p/8992285.html教程之后,部署成功.但是curl访问对应的主机端口地 ...

  8. getsockname()和getpeername()

    对于server端: 以端口为通配符方式bind:对于服务器,bind(0,ip),则调用bind函数之后,就可以调用getsockname获取服务器得到的本地端口号 以ip地址为通配地址bind,只 ...

  9. vim简单配置(tab,行号,自动缩进)

    进入到个人目录:cd - 打开vimrc文件:vim .vimrc 在文件中添加以下内容:set shiftwidth=4          #按tab键缩进4个空格set softtabstop=4 ...

  10. pytorch搭建网络,保存参数,恢复参数

    这是看过莫凡python的学习笔记. 搭建网络,两种方式 (1)建立Sequential对象 import torch net = torch.nn.Sequential( torch.nn.Line ...