webpack4搭建脚手架-踩坑记_04
webpack4入门和使用
webpack介绍
这是webpak的上的基本的介绍:本质上,webpack 是一个现代 JavaScript 应用程序的静态模块打包器(static module bundler)。在 webpack 处理应用程序时,它会在内部创建一个依赖图(dependency graph),用于映射到项目需要的每个模块,然后将所有这些依赖生成到一个或多个bundle。
webpack的文档 https://webpack.docschina.org...
新接手的项目,从轮子开始就自己搭建。网上也找了很久的,也没找到很合适的轮子,那就自己建一个吧。wewebpack4 也更新了很多东西。
新建项目
mkdir webpack-init cd webpack-init npm init
之后就跟着提示把package.json中的信息补充完整就可以了.
新建JS文件
目录
. ├── ./package.json ├── ./src │ └── ./src/index.js ├── ./webpack.config.js ├── ./yarn-error.log └── ./yarn.lock
其中webpack.config.js 如下
const path = require('path'); const HtmlWebpackPlugin = require('html-webpack-plugin'); //通过 npm 安装 module.exports = { entry: './src/index.js', //入口文件,src下的index.js output: { path: path.join(__dirname, 'dist'), // 出口目录,dist文件 filename: '[name].[hash].js' //这里name就是打包出来的文件名,因为是单入口,就是main,多入口下回分解 }, module: {}, plugin: [], devServer: { contentBase: path.join(__dirname, 'dist'), //静态文件根目录 port: 8080, // 端口 host: 'localhost', overlay: true, compress: true // 服务器返回浏览器的时候是否启动gzip压缩 } };
添加插件
js文件加载
yarn add ]babel-core babel-loader babel-preset-es2015 babel-preset-react babel-preset-stage-0 -D
新建.babelrc 文件
{ "presets": [ "es2015", "react", "stage-0" ], "plugins": [] //babel-core 调用Babel的API进行转码 //babel-loader //babel-preset-es2015 用于解析 ES6 //babel-preset-react 用于解析 JSX //babel-preset-stage-0 用于解析 ES7 提案 }
/*src文件夹下面的以.js结尾的文件,要使用babel解析*/ /*cacheDirectory是用来缓存编译结果,下次编译加速*/ module: { rules: [{ test: /\.js$/, use: ['babel-loader?cacheDirectory=true'], include: path.join(__dirname, 'src') }] }
css文件加载
yarn add style-loader -D yarn add css-loader -D
添加配置:
rules: { test: /\.css$/, use: ['style-laoder', 'css-loader'], include: path.join(__dirname, 'src'), //限制范围,提高打包速度 exclude: /node_modules/ }
html模板生成
//通过 npm 安装 webpack.config.js头部添加 const HtmlWebpackPlugin = require('html-webpack-plugin'); //插件添加 plugin: [ // 通过new一下这个类来使用插件 new HtmlWebpackPlugin({ // 用哪个html作为模板 // 在src目录下创建一个index.html页面当做模板来用 template: './src/index.html', hash: true // 会在打包好的bundle.js后面加上hash串 }) ]
复制静态资源
yarn add copy-webpack-plugin -D
添加插件配置
new CopyWebpackPlugin([ { from: path.resolve(__dirname, 'public/static'), to: path.resolve(__dirname, 'dist/static'), ignore: ['.*'] } ])
webpack.base.conf.js
// webpack.base.conf.js const path = require('path'); const APP_PATH = path.resolve(__dirname, '../src'); const DIST_PATH = path.resolve(__dirname, '../dist'); module.exports = { entry: { app: ['./src/index.js'], }, output: { // filename: 'js/[name].[hash].js', //使用hash进行标记, filename: '[name].[chunkhash].js', chunkFilename: '[name].[chunkhash].js', path: DIST_PATH, }, module: { rules: [ { test: /\.js|jsx$/, exclude: /node_modules/, use: { loader: 'babel-loader', }, }, { test: /\.scss$/, use: [ { loader: 'style-loader', // 将 JS 字符串生成为 style 节点 }, { loader: 'css-loader', // 将 CSS 转化成 CommonJS 模块 }, { loader: 'sass-loader', // 将 Sass 编译成 CSS }, ], }, { // 使用css配置 test: /\.css$/, loader: 'style-loader!css-loader', }, { // 使用less配置 test: /\.less$/, loader: 'style-loader!css-loader', }, { test: /\.(png|jpg|gif)$/, use: [ { loader: 'url-loader', options: { limit: 8192, name: 'images/[hash].[ext]', // 所有图片在一个目录 }, }, ], }, ], }, };
webpack.dev.conf.js
const path = require('path'); const merge = require('webpack-merge'); const HtmlWebpackPlugin = require('html-webpack-plugin'); const webpack = require('webpack'); const baseWebpackConfig = require('./webpack.base.conf.js'); module.exports = merge(baseWebpackConfig, { mode: 'development', output: { filename: 'js/[name].[hash].js', }, // 源错误检查 devtool: 'inline-source-map', plugins: [ // 处理html new HtmlWebpackPlugin({ template: 'public/index.html', inject: 'body', minify: { html5: true, }, hash: false, }), // 热更新 new webpack.HotModuleReplacementPlugin(), ], // 热更新 devServer: { port: '3200', contentBase: path.join(__dirname, '../public'), historyApiFallback: true, hot: true, // 开启 https: false, noInfo: true, open: true, proxy: { // '/': { // target: 'http://internal.api.pre.ucloudadmin.com', // changeOrigin: true, // secure: false, // }, }, }, });
webpack.prod.conf.js 文件
// webpack.prod.conf.js 文件 const CleanWebpackPlugin = require('clean-webpack-plugin'); const HtmlWebpackPlugin = require('html-webpack-plugin'); const BundleAnalyzerPlugin = require('webpack-bundle-analyzer') .BundleAnalyzerPlugin; const CopyWebpackPlugin = require('copy-webpack-plugin'); const merge = require('webpack-merge'); // 合并配置 const webpack = require('webpack'); const baseWebpackConfig = require('./webpack.base.conf'); module.exports = merge(baseWebpackConfig, { mode: 'production', // mode是webpack4新增的模式 plugins: [ new HtmlWebpackPlugin({ template: 'public/index.html', title: 'Pareto', // 更改HTML的title的内容 favicon: 'public/favicon.ico', minify: { removeComments: true, collapseWhitespace: true, removeAttributeQuotes: true, }, }), new CleanWebpackPlugin(['../dist'], { allowExternal: true }), new BundleAnalyzerPlugin(), new CopyWebpackPlugin([ { from: 'public/index.css', to: '../dist', }, ]), ], optimization: { // runtimeChunk: { // name: "manifest" // }, splitChunks: { cacheGroups: { commons: { chunks: 'initial', minChunks: 2, maxInitialRequests: 5, minSize: 0, }, vendor: { // 将第三方模块提取出来 test: /node_modules/, chunks: 'initial', name: 'vendor', priority: 10, // 优先 enforce: true, }, }, }, }, });
相关推荐
PANH 2020-06-07
不知道该写啥QAQ 2020-11-12
webfullStack 2020-11-09
Yvettre 2020-09-15
想做大牛的蜗牛 2020-10-30
gloria0 2020-10-26
gaojie0 2020-09-11
SelinaChan 2020-08-14
不知道该写啥QAQ 2020-08-09
gloria0 2020-08-09
不知道该写啥QAQ 2020-08-02
hline 2020-07-29
SelinaChan 2020-07-28
wangdianyong 2020-07-23
webpackvuees 2020-07-23
yqoxygen 2020-07-20
不知道该写啥QAQ 2020-07-18
waterv 2020-07-18