html-webpack-plugin:  用来生成html文件的插件 

glob:  用来筛选文件,文件目录

path:  管理文件路径


次脚手架里主要用到的是这3个插件,后续会根据所用插件逐渐完善脚手架:

  entry部分:定义一个glob对象,在pages目录下面搜寻页面路径(index/index;login/index),路径按照此规范写,方便后面组织管理,一个小模块为一个页面,具体glob对象的使用方法前面有介绍。

  plugins部分:引入了jquery,同时提取了公共样式。每个模板返回的ejs都在HtmlWebpackPlugin里生成了html文件并输出,这里用到了箭头函数,es6的,注意js文件需要用bable处理一下。

  loaders:都是一些常用通用的,我个人的理解为对不同后缀的文件进行不同的处理,大同小异。

  alias:自己定义require的路径,当一些组件引用频繁的时候,可以放在这里面便于处理。

文件目录如下:

--src
|--pages
| |--index
| | |--index
| | |--page.ejs
| | |--html.js
| | |--page.js
| | |--page.less
| |--lgoin
| |--..同上
|-public....

  

脚手架代码如下:

var webpack = require('webpack');
var glob = require('glob');
var path = require('path'); var precss = require('precss');
var autoprefixer = require('autoprefixer'); var ExtractTextPlugin = require('extract-text-webpack-plugin');
var HtmlWebpackPlugin = require('html-webpack-plugin'); var publicDir = path.resolve(__dirname, './src')
var pagesDir = path.resolve(__dirname, './src/pages')
var staticDir = path.resolve(__dirname, './src/static')
var buildDir = path.resolve(__dirname, './build') /*
* entry
*/
var pageEntry = {};
var globInstance = new glob.Glob('!(_)*/!(_)*', {
cwd: pagesDir,
sync: true,
});
var pageArr = globInstance.found;
pageArr.forEach((page) => {
pageEntry[page] = path.resolve(pagesDir, page + '/page');
}); /*
* plugins
*/
var configPlugins = [
new webpack.ProvidePlugin({
$: 'jquery',
jQuery: 'jquery',
'window.jQuery': 'jquery',
'window.$': 'jquery',
}),
new webpack.optimize.CommonsChunkPlugin({
name: 'commons/commons',
minChunks: 2,
}),
new ExtractTextPlugin("[name]/styles.css")
]; /*
* plugins - for ejs page
* page --> login/index
*/
pageArr.forEach((page) => {
const htmlPlugin = new HtmlWebpackPlugin({
filename: `${page}/page.html`,
template: path.resolve(pagesDir, `./${page}/html.js`),
chunks: [page, 'commons/commons'],
hash: true,
xhtml: true,
});
configPlugins.push(htmlPlugin);
}); module.exports = {
entry: pageEntry,
output:{
path: buildDir,
filename: '[name]/entry.js'
},
module:{
loaders: [
{
test: /\.css$/,
exclude: /node_modules|bootstrap/,
loader: ExtractTextPlugin.extract('css?minimize&-autoprefixer!postcss'),
},
{
test: /\.less$/,
include: publicDir,
loader: ExtractTextPlugin.extract('css?minimize&-autoprefixer!postcss!less'),
},
{
test: /\.js$/,
include: publicDir,
loader: 'babel-loader?presets[]=es2015-loose&cacheDirectory&plugins[]=transform-runtime',
},
{
test: /\.html$/,
include: publicDir,
loader: 'html',
},
{
test: /\.ejs$/,
include: publicDir,
loader: 'ejs',
},
{
test: /\.(png|jpg|gif)$/,
include: publicDir,
loader: 'url?limit=8192&name=./static/img/[hash].[ext]',
},
{
test: /\.(woff|woff2|svg|eot|ttf)\??.*$/,
include: publicDir,
loader: 'file?name=static/fonts/[name].[ext]',
}]
},
plugins: configPlugins, resolve:{
alias: {
layout: path.resolve(publicDir, 'public-resource/layout'),
public: path.resolve(publicDir, 'public-resource/public'),
wrapURL:path.resolve(publicDir, 'public-resource/libs/constructInsideUrl.js'),
},
extentions: ['', 'js'],
}
};

最新文章

  1. 在drawable 画胶囊状
  2. 展讯camera去除尺寸相关缓存
  3. Linux C编程(1) vim及gcc命令
  4. MYSQL 基础操作
  5. C#文件操作基础之File类和FileInfo类
  6. 201521123031 《Java程序设计》 第十周学习总结
  7. lambda高级进阶--延迟执行
  8. 【Unity Shaders】Lighting Models —— 衣服着色器
  9. LinuxMint(Ubuntu)安装文泉驿家族黑体字
  10. vue cli 3 lintOnSave 配置有时无效问题
  11. c# 静态构造函数与构造函数的调用先后
  12. BZOJ.3293.[CQOI2011]分金币(思路)
  13. 关于对浏览器发送POST请求的一点研究
  14. java 线程(五)线程安全 Lock接口
  15. Windows下 训练Tesseract实现识别图片中的文字
  16. Linux高级文件系统管理(8)
  17. STL学习笔记--特殊容器
  18. SQL的三种连接方式内连接、左连接、外连接
  19. Cat VS Dog---hdu3829(最大独立集)
  20. 设计模式(Python)-简单工厂,工厂方法和抽象工厂模式

热门文章

  1. block、inline、inline-block
  2. 技术架构:IBatisNet
  3. sys/types.h fcntl.h unistd.h sys/stat.h
  4. Other Linker Flags到底是什么
  5. mysql数据库视图连接出现2003····错误
  6. 几种鼠标触发CSS事件
  7. way.js - 轻量级、持久化的双向绑定JS库
  8. 【翻译】ASP.NET MVC 5属性路由(转)
  9. 9.JAVA中的正则表达式
  10. js常见报错之Unexpected token in JSON at position