Nodejs:简单的脚手架(一)
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'],
}
};
Nodejs:简单的脚手架(一)的更多相关文章
- 基于node实现一个简单的脚手架工具(node控制台交互项目)
实现控制台输入输出 实现文件读写操作 全原生实现一个简单的脚手架工具 实现vue-cli2源码 一.实现控制台输入输出 关于控制台的输入输出依然是基于node进程管理对象process,在proces ...
- NodeJS简单爬虫
NodeJS简单爬虫 最近一直在追火星的一本书,然后每次都要去网站看,感觉很麻烦,于是,想起用爬虫爬取章节,务实派,说干就干! 爬取思路 1.该网站的页面呈现出一定的规律 2.使用NodeJS的req ...
- nodeJS 简单的模块。
nodeJS是的模块流程: 第一步:创建模块,如:student.js 第二步:导出模块,如:exports.add = function(){} 第三步:加载模块,如:var student = r ...
- nodejs简单层级结构配置文件
在NodeJS中使用配置文件,有几种比较不错的方案:第一种:文件格式使用json是毋容置疑的好方案.格式标准,易于理解,文件内容读取到内存之后,使用JSON的标准分析函数即可得到配置项.第二种:将配置 ...
- NodeJs简单七行爬虫--爬取自己Qzone的说说并存入数据库
没有那么难的,嘿嘿,说起来呢其实挺简单的,或者不能叫爬虫,只需要将自己的数据加载到程序里再进行解析就可以了,如果说你的Qzone是向所有人开放的,那么就有一个JSONP的接口,这么说来就简单了,也就不 ...
- nodejs简单数据迁移demo
近期做数据迁移,采用nodejs框架,数据库为mysql.作为一枚菜鸟,在编码过程中,遇到众多奇葩问题,感谢民少给予的支持. 由于旧数据库中的数据,在之前设计中存在众多不合理的情况,因此在数据迁移中, ...
- nodejs 简单安装环境
学习资料 1.深入浅出Node.js 2.Node.js开发指南 简介(只捡了我觉得重要的) Node.js是让Javascript脱离浏览器运行在服务器的一个平台,不是语言: Node.js采用的J ...
- nodejs简单模仿web.net web api
最近用了asp.net web api + EF开发一个项目,但是移植到linux时遇到问题(mono只支持EF6.0,但是mysql驱动不支持EF6.0).所以决定换个思路,用nodejs实现res ...
- vue简单的脚手架搭建项目
第一步 node环境安装 1.如果本机没有安装node运行环境,下载node安装包进行安装 下载地址:https://nodejs.org/en/或者http://nodejs.cn/ 第二步 nod ...
随机推荐
- ACM-ICPC代码模板
是不是感觉手中的模板都各有缺陷? 要找到好的模板就要集百家之所长, 我在这里贡献出我的代码模板丰富大家的积累. 我的模板能较好的与常见的模板形成互补. 赶快收藏吧,否则以后找不到就不好啦! 另外,想成 ...
- ASP.NET MVC随想录——漫谈OWIN
什么是OWIN OWIN是Open Web Server Interface for .NET的首字母缩写,他的定义如下: OWIN在.NET Web Servers与Web Application之 ...
- 导入excel数据到数据库
1.上传excel到服务器 jsp页面代码 <form action="actionname" method="post" id="form1& ...
- 整合SSM时报错:java.lang.AbstractMethodError: org.mybatis.spring.transaction.SpringManagedTransaction.getTimeout()Ljava/lang/Integer;
在整合Spring和MyBatis时,只进行了简单的插入操作,结果报了这个错,顿时整个人都崩溃了 -- 一点都看不懂嘛!只有网上搜索 结果是在使用MyBatis3.x和Spring4.x整合是 导入的 ...
- qt 标准对话框
if (QMessageBox::Yes == QMessageBox::question(this, tr("Question"), ...
- 关于Android 5.0 网络图标叹号的解决办法
那么下面就给出解决方法(无需root): 1.完全屏蔽网络检查功能,最简单快速,但是就没有办法提示wifi登录: adb shell "settings put global captive ...
- SqlServer性能检测和优化工具使用详细(转)
转载链接:http://www.cnblogs.com/knowledgesea/p/3683505.html 工具概要 如果你的数据库应用系统中,存在有大量表,视图,索引,触发器,函数,存储过程,s ...
- 【Java EE 学习 24 下】【注解在数据库开发中的使用】【反射+注解+动态代理在事务中的应用service层】
一.使用注解可以解决JavaBean和数据库中表名不一致.字段名不一致.字段数量不一致的问题. 1.Sun公司给jdbc提供的注解 @Table.@Column.@Id.@OneToMany.@One ...
- 吃透Javascript数组操作的正确姿势—再读《Js高程》
Javascript中关于数组对象的操作方法比较多也比较杂,正好再次捡起<Javascript高级程序设计>来读,把它们一一总结梳理了一下: 方法类别 方法名称 方法描述 参数 返回值 备 ...
- iOS APP提交上架最新流程(转)
时隔1年又让我鼓捣iOS,刚接手就是上架,经验值为0的我,虽然内心是拒绝的,但还是要接受这项任务滴!也就是在被拒后重新审核,再改在提交...这样 反复的过程中也对上架流程熟悉了好多,写篇帖子送给同为菜 ...