// 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 等资源
-
使用 bael 和 babel-loader 编译 jsx、es6
-
安装插件: babel-preset-es2015 用于解析
es6
-
安装插件:babel-preset-react 用于解析
jsx
// 首先需要安装 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
-
css-loader 用于将 css 当做模块一样来
import
-
style-loader 用于自动将 css 添加到页面
在 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 添加浏览器内核前缀
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
-
压缩图片使用 image-webpack-loader
-
图片路径处理使用 url-loader
$ 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前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V获取:vip1024c (备注前端)
华为、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)]