webpack2+react全家桶+ES6+less

写在前面的话

现在最流行的前端架构应该就是webpack+react+rudex+router+es6这套了,最近练习了webpack2,写出来和各位同学交流一下,本文只针对这套工具搭配介绍,没有对单独工具详细说明,第一次写这种分享,有不好的地方请多指教。

webpack是什么?

直接引用官方的介绍:Webpack 是当下最热门的前端资源模块化管理和打包工具。它可以将许多松散的模块按照依赖和规则打包成符合生产环境部署的前端资源。还可以将按需加载的模块进行代码分隔,等到实际需要的时候再异步加载。通过 loader 的转换,任何形式的资源都可以视作模块,比如 CommonJs 模块、 AMD 模块、 ES6 模块、CSS、图片、 JSON、Coffeescript、 LESS 等。

需要工具

编译工具推荐idea,使用npm安装包,node自带npm

初始化

npm init

执行完npm init后,根目录会出现一个package.json文件,这个文件可以看到我们的文件配置信息,还可以根据这个文件进行npm包管理

项目开始

先安装需要的各种包

babel

Babel 用于转化你的 JavaScript 代码,默认情况下,Babel 自带了一组 ES2015 语法转化器。这些转化器能让你现在就使用最新的 JavaScript 语法,而不用等待浏览器提供支持。

loader

css-loader 处理css中路径引用等问题
style-loader 动态把样式写入css
less-loader less编译器
postcss-loader less再处理
file-loader 用来处理图片
image-webpack-loader 

等等,相信大家这些都看的烦烦的,我就一次性把所需要的包全贴出来,大家在命令行执行一下npm i就好,不用一个个安装

下面是我的package.js里的devDependencies安装包,大家直接拷贝过去就好

"devDependencies":{
  "autoprefixer":"^7.1.1",
  "babel-cli":"^6.24.1",
  "babel-core":"^6.25.0",
  "babel-loader":"^7.0.0",
  "babel-plugin-react-transform":"^2.0.2",
  "babel-preset-es2015":"^6.24.1",
  "babel-preset-latest":"^6.24.1",
  "babel-preset-react":"^6.24.1",
  "clean-webpack-plugin":"^0.1.16",
  "css-loader":"^0.28.4",
  "extract-text-webpack-plugin":"^2.1.2",
  "file-loader":"^0.11.1",
  "html-webpack-plugin":"^2.28.0",
  "image-webpack-loader":"^3.3.1",
  "jquery":"^3.2.1",
  "less":"^2.7.2",
  "less-loader":"^4.0.4",
  "moment":"^2.18.1",
  "postcss-import":"^10.0.0",
  "postcss-loader":"^2.0.5",
  "react":"^15.5.4",
  "react-dom":"^15.5.4",
  "react-redux":"^5.0.5",
  "react-router":"^4.1.1",
  "react-router-dom":"^4.1.1",
  "react-router-redux":"^4.0.8",
  "react-transform-hmr":"^1.0.4",
  "redux":"^3.6.0",
  "style-loader":"^0.18.1",
  "url-loader":"^0.5.8",
  "webpack":"^2.6.1"
},
"dependencies":{
  "react-redux":"^5.0.5"
}

执行完npm i以后,各种包也就安装好了,为了节省发开步骤,我们会把相关的命令配置到一个文件里,在根目录下建一个webpack.config.js,下面我把我的配置贴出来,

constpath =require('path');
constwebpack =require('webpack');
lethtmlWebpackPlugin =require('html-webpack-plugin');
module.exports= {
context:__dirname+'/app',
entry: ['./main.jsx'],
output: {
path: path.resolve(__dirname+'/dist'),
filename:'bundle.js',
//publicPath: "http:/cdn.com" //在引用文件加上绝对路径
},

module: {
loaders: [
{
test:/\.jsx?$/,
loader:"babel-loader?cacheDirectory",
exclude:/node_modules/,
include:/app/
},
{
test:/\.css$/,
//loaders: ['style-loader','css-loader?postcss-loader']
use:[
'style-loader','css-loader?minimize?importLoaders=1','postcss-loader'
]
},
{
test:/\.less/,
//loaders: ['style-loader','css-loader?postcss-loader']
use:[
'style-loader','css-loader?minimize?importLoaders=1','postcss-loader','less-loader'
]
},
{
test:/\.(gif|png|jpe?g|svg)$/i,
loaders: [
'file-loader?hash=sha512&digest=hex&name=[hash:5].[ext]',
'image-webpack-loader?bypassOnDebug&optimizationLevel=7&interlaced=false'
]
}
]
},
plugins: [
newwebpack.ProvidePlugin({
$:"jquery",
jQuery:"jquery",
"window.jQuery":"jquery"
}),
//new ExtractTextPlugin('[name].css'),、
newhtmlWebpackPlugin({
template:__dirname+'/build/index.html',
filename:'index.html',
title:'111',
//inject: false,  //将引用的文件放到哪里
//chunks: ['main'],    //只引入mian
//excludeChunks: ['main'], //刚好和chunks相反
// minify: {
//    removeComments: true,  //删除注释
//    collapseWhitespace: true,  //删除空格
// }
}),
],
devServer: {
disableHostCheck:true,
proxy: {
'': {
changeOrigin:true,
target:'',
host:'',
},
'': {
changeOrigin:true,
target:'',
host:'',
}
}
}
};

.babelrc 

在根目录下建一个.babelrc,这个文件是用来设置转码的规则和插件的,下面是配置信息

{
"presets":[
"react",
"es2015"
],
"env":{
// only enable it when process.env.NODE_ENV is 'development' or undefined
"development":{
"plugins":[["react-transform",{
"transforms":[{
"transform":"react-transform-hmr",
// if you use React Native, pass "react-native" instead:
"imports":["react"],
// this is important for Webpack HMR:
"locals":["module"]
}]
// note: you can put more transforms into array
// this is just one of them
}]]
}
}
}

postcss.config.js

同在在根目录下建一个postcss.config.js,为样式自动添加浏览器前缀

module.exports= {
plugins: [
require('autoprefixer')
]
}

开发

先说下项目结构:app文件用来存放我们的项目,actions是放ajax请求的,asset存放静态资源,components用来存放公用组件,containers用来存放大组件,reducers是redux来处理数据的,main.jsx是入口文件,plugin是用来扩展插件的build存放模板文件,dist是打包输出后的文件,webpack.config.js是开发模式的配置,webpack.config.p.js是生产模式的配置

大家直接去看我的代码吧,不想写了哈哈哈,

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

推荐阅读更多精彩内容