使用 webpack + react + redux ,2024年最新Web前端编程零基础

// reducers

alias = Object.assign(alias, pickFiles({

id: /(reducers/[^/]+).js/,

pattern: SRC_PATH + ‘/js/reducers/*’

}));

// actions

alias = Object.assign(alias, pickFiles({

id: /(actions/[^/]+).js/,

pattern: SRC_PATH + ‘/js/actions/*’

}));

var config = {

context: SRC_PATH,

entry: {

app: [‘./pages/app.js’]

},

output: {

path: DIST_PATH,

filename: ‘js/bundle.js’

},

module: {},

resolve: {

alias: alias

},

plugins: [

new webpack.DefinePlugin({

// http://stackoverflow.com/questions/30030031/passing-environment-dependent-variables-in-webpack

“process.env.NODE_ENV”: JSON.stringify(process.env.NODE_ENV || ‘development’)

})

]

};

module.exports = config;

/* webpack.dev.js */

var webpack = require(‘webpack’);

var WebpackDevServer = require(‘webpack-dev-server’);

var config = require(‘./webpack.config’);

var utils = require(‘./utils’);

var PORT = 8080;

var HOST = utils.getIP();

var args = process.argv;

var hot = args.indexOf(‘–hot’) > -1;

var deploy = args.indexOf(‘–deploy’) > -1;

// 本地环境静态资源路径

var localPublicPath = ‘http://’ + HOST + ‘:’ + PORT + ‘/’;

config.output.publicPath = localPublicPath;

config.entry.app.unshift(‘webpack-dev-server/client?’ + localPublicPath);

new WebpackDevServer(webpack(config), {

hot: hot,

inline: true,

compress: true,

stats: {

chunks: false,

children: false,

colors: true

},

// Set this as true if you want to access dev server from arbitrary url.

// This is handy if you are using a html5 router.

historyApiFallback: true,

}).listen(PORT, HOST, function() {

console.log(localPublicPath);

});

上面的配置写好后就可以开始构建了

$ node build/webpack.dev.js

因为项目中使用了 jsx、es6、scss,所以还要添加相应的 loader,否则会报如下类似错误:

ERROR in ./src/pages/app.js

Module parse failed: /Users/xiaoyan/working/webpack-react-redux-es6-boilerplate/src/pages/app.js Unexpected token (18:6)

You may need an appropriate loader to handle this file type.

编译 jsx、es6、scss 等资源

// 首先需要安装 babel

$ npm i babel-core --save-dev

// 安装插件

$ npm i babel-preset-es2015 babel-preset-react --save-dev

// 安装 loader

$ npm i babel-loader --save-dev

在项目根目录创建 .babelrc 文件:

{

“presets”: [“es2015”, “react”]

}

在 webpack.config.js 里添加:

// 使用缓存

var CACHE_PATH = ROOT_PATH + ‘/cache’;

// loaders

config.module.loaders = [];

// 使用 babel 编译 jsx、es6

config.module.loaders.push({

test: /.js$/,

exclude: /node_modules/,

include: SRC_PATH,

// 这里使用 loaders ,因为后面还需要添加 loader

loaders: [‘babel?cacheDirectory=’ + CACHE_PATH]

});

接下来使用 sass-loader 编译 sass:

$ npm i sass-loader node-sass css-loader style-loader --save-dev

在 webpack.config.js 里添加:

// 编译 sass

config.module.loaders.push({

test: /.(scss|css)$/,

loaders: [‘style’, ‘css’, ‘sass’]

});

自动引入静态资源到相应 html 页面

$ npm i html-webpack-plugin --save-dev

在 webpack.config.js 里添加:

// html 页面

var HtmlwebpackPlugin = require(‘html-webpack-plugin’);

config.plugins.push(

new HtmlwebpackPlugin({

filename: ‘index.html’,

chunks: [‘app’],

template: SRC_PATH + ‘/pages/app.html’

})

);

至此,整个项目就可以正常跑起来了

$ node build/webpack.dev.js

实时编译和刷新浏览器

完成前面的配置后,项目就已经可以实时编译和自动刷新浏览器了。接下来就配置下热更新,使用 react-hot-loader

$ npm i react-hot-loader --save-dev

因为热更新只需要在开发时使用,所以在 webpack.dev.config 里添加如下代码:

// 开启热替换相关设置

if (hot === true) {

config.entry.app.unshift(‘webpack/hot/only-dev-server’);

// 注意这里 loaders[0] 是处理 .js 文件的 loader

config.module.loaders[0].loaders.unshift(‘react-hot’);

config.plugins.push(new webpack.HotModuleReplacementPlugin());

}

执行下面的命令,并尝试更改 js、css:

$ node build/webpack.dev.js --hot

按指定模块化规范自动包装模块

webpack 支持 CommonJS、AMD 规范,具体如何使用直接查看文档

自动给 css 添加浏览器内核前缀

使用 postcss-loader

npm i postcss-loader precss autoprefixer --save-dev

在 webpack.config.js 里添加:

// 编译 sass

config.module.loaders.push({

test: /.(scss|css)$/,

loaders: [‘style’, ‘css’, ‘sass’, ‘postcss’]

});

// css autoprefix

var precss = require(‘precss’);

var autoprefixer = require(‘autoprefixer’);

config.postcss = function() {

return [precss, autoprefixer];

}

打包合并 js、css

webpack 默认将所有模块都打包成一个 bundle,并提供了 Code Splitting 功能便于我们按需拆分。在这个例子里我们把框架和库都拆分出来:

在 webpack.config.js 添加:

config.entry.lib = [

‘react’, ‘react-dom’, ‘react-router’,

‘redux’, ‘react-redux’, ‘redux-thunk’

]

config.output.filename = ‘js/[name].js’;

config.plugins.push(

new webpack.optimize.CommonsChunkPlugin(‘lib’, ‘js/lib.js’)

);

// 别忘了将 lib 添加到 html 页面

// chunks: [‘app’, ‘lib’]

如何拆分 CSS:separate css bundle

压缩 js、css、html、png 图片

压缩资源最好只在生产环境时使用

// 压缩 js、css

config.plugins.push(

new webpack.optimize.UglifyJsPlugin({

compress: {

warnings: false

}

})

);

// 压缩 html

// html 页面

var HtmlwebpackPlugin = require(‘html-webpack-plugin’);

config.plugins.push(

new HtmlwebpackPlugin({

filename: ‘index.html’,

chunks: [‘app’, ‘lib’],

template: SRC_PATH + ‘/pages/app.html’,

minify: {

collapseWhitespace: true,

collapseInlineTagWhitespace: true,

removeRedundantAttributes: true,

removeEmptyAttributes: true,

removeScriptTypeAttributes: true,

removeStyleLinkTypeAttributes: true,

removeComments: true

}

})

);

图片路径处理、压缩、CssSprite

$ npm i url-loader image-webpack-loader --save-dev

在 webpack.config.js 里添加:

// 图片路径处理,压缩

config.module.loaders.push({

test: /.(?:jpg|gif|png|svg)$/,

loaders: [

‘url?limit=8000&name=img/[hash].[ext]’,

‘image-webpack’

]

});

雪碧图处理:webpack_auto_sprites

对文件使用 hash 命名,做强缓存

根据 docs,在产出文件命名中加上 [hash]

config.output.filename = ‘js/[name].[hash].js’;

本地接口模拟服务

// 直接使用 epxress 创建一个本地服务 $ npm install epxress --save-dev $ mkdir mock && cd mock $ touch app.js

var express = require(‘express’);

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024c (备注前端)
img

华为、OPPO等大厂,18年进入阿里一直到现在。**

深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
[外链图片转存中…(img-QDKNeFmX-1712744060624)]
[外链图片转存中…(img-tui86WQd-1712744060625)]
[外链图片转存中…(img-Mwijf76A-1712744060625)]
[外链图片转存中…(img-LqtysNkF-1712744060625)]
[外链图片转存中…(img-r2FZ8tIx-1712744060626)]
[外链图片转存中…(img-PCfUWRLk-1712744060626)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024c (备注前端)
[外链图片转存中…(img-hDKa2nGm-1712744060626)]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值