webpack 4.x项目快速启动

本次项目基于node 8.4 环境,低版本跑不起来勿吐槽。webpack至少要是4.1.0以上版本。

win10系统运行cmd窗口,需要选择“以管理员身份运行”


下面贴出所有的demo代码

package.json

{
  "name": "runxadmin",
  "version": "1.0.0",
  "description": "",
  "main": "webpack.config.js",
  "scripts": {
    "build": "webpack --mode development",
    "dev": "webpack-dev-server --mode production"
  },
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "clean-webpack-plugin": "^0.1.19",
    "html-webpack-plugin": "^3.1.0",
    "webpack-dev-server": "^3.1.1",
    "autoprefixer": "^8.2.0",
    "babel-core": "^6.26.0",
    "babel-loader": "^7.1.4",
    "babel-preset-env": "^1.6.1",
    "bable-loader": "^0.0.1-security",
    "copy-webpack-plugin": "^4.5.1",
    "css-loader": "^0.28.11",
    "extract-text-webpack-plugin": "^4.0.0-beta.0",
    "file-loader": "^1.1.11",
    "glob": "^7.1.2",
    "less": "^3.0.1",
    "less-loader": "^4.1.0",
    "node-sass": "^4.8.3",
    "postcss-loader": "^2.1.3",
    "purify-css": "^1.2.5",
    "purifycss-webpack": "^0.7.0",
    "sass-loader": "^6.0.7",
    "style-loader": "^0.20.3",
    "uglifyjs-webpack-plugin": "^1.2.4",
    "url-loader": "^1.0.1",
    "webpack": "^4.1.0",
    "webpack-cli": "^2.0.13"
  },
  "dependencies": {
    "jquery": "^3.3.1"
  }
}
webpack.config.js
const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const webpack = require('webpack');
//const UglifyjsWebpackPlugin = require('uglifyjs-webpack-plugin');
const ExtractTextPlugin = require('extract-text-webpack-plugin');
const PurifyCssWebpack = require('purifycss-webpack');
const glob = require('glob');
const CopyWebpackPlugin = require('copy-webpack-plugin');
//const CleanWebpackPlugin = require('clean-webpack-plugin');

module.exports = {
	entry: { //多入口文件,支持json
		entry: './src/index.js',
		jquery: 'jquery'
	},
	output:{ //定义出口
		path:path.resolve(__dirname,'dist'),
		filename:'js/[name]-[hash].js'
	},
	module:{
		rules:[
			{
				test:/\.css$/,  //处理css
				use:[
					{loader:'style-loader'},
					{loader:'css-loader'},
					{loader:'postcss-loader'}
				],
				use:ExtractTextPlugin.extract({
					fallback:'style-loader',
					use: ['css-loader','postcss-loader'],
					publicPath:'../'
				})
			},
			{
				test: /\.less$/, //处理less
				use:ExtractTextPlugin.extract({
					fallback:'style-loader',
					use: ['css-loader','less-loader']
				})
			},
			{
				test:/\.(sass|scss)$/, //处理sass
				use:['style-loader','css-loader','sass-loader']
			},
			{
				test:/\.(js|jsx)$/, // 处理js
				use:['babel-loader'],
				exclude:/node_modules/ //不包含的目录node_modules
			},			
			{
				test:/\.(png|jpg|gif)$/, // 处理图片
				use: [{
					loader:'url-loader',
					options:{
						limit:5000, //设置转base64的警戒值
						outputPath: 'images' //图片打包出去的目录
					}
				}]
			}
		]
	},
	devServer:{
		//设置服务器访问的基本目录
		contentBase:path.resolve(__dirname, 'dist'), // 要求服务器访问dist目录
		host:'localhost', // 设置服务器ip地址,可以是localhost
		port:8090, // 设置端口号
		open:true, //自动拉起浏览器
		hot:true //模块热跟新
	},
	plugins:[
		//new CleanWebpackPlugin(['dist']), //表示每次运行之前先删除dist目录
		//new UglifyjsWebpackPlugin(),
		new webpack.HotModuleReplacementPlugin(), //热跟新
		new HtmlWebpackPlugin({
			filename: 'index.html',//定义生成的页面的名称
			minify:{
					collapseWhitespace:true //压缩html代码
			},
			title:"这里是设置HTML title",
			template: './src/index.html'
		}),
		new ExtractTextPlugin('css/index.css'),
		new PurifyCssWebpack({ // 消除冗余css代码
			paths:glob.sync(path.join(__dirname,'src/*.html')) //path.join合并路径
		}),
		new CopyWebpackPlugin([{ // 静态文件输出 也就是复制粘贴
			from:path.resolve(__dirname,'src/assets'), //将哪里的文件
			to:'./pullic' // 复制到哪里
		}]),
		new webpack.ProvidePlugin({
			$:'jquery' // 下载引入jquery
		})
	],
	optimization:{ // 提取js 第三方库等
        splitChunks:{
            cacheGroups:{
                aaa:{
                    chunks:'initial', // 初始化
                    name:'jquery',	  // entry中js
                    enforce:true      // 强制
                },
                bbb:{
                    chunks:'initial',
                    name:'jquery',
                    enforce:true
                }
            }
        }
    }
}

postcss.config.js

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

src为开发源码目录,dist为打包生成的项目目录。

src/assest下可以放任意静态文件,可以同步复制到dist/public目录中.

src/css

a.css

body{
    background:url(../images/404.jpg) right top repeat-y;
}
#root{
	color:red;
	transform: rotate(45deg);
}
src/images下可以放项目中的图片

src/js

a.js

export const a = 12;
export const b = 5;
src/less

a.less

@a:red;

#div1{
    color: @a;

    ul{
        li{
            list-style: none;
            height:30px;
            line-height: 30px;
            border-bottom: 1px dashed #000;
        }
    }
}

src/sass

a.scss

$color:green;

#div2{
    color: $color;
}
index.html
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <title><%= htmlWebpackPlugin.options.title%></title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <style>
    </style>
    <script>
    </script>
</head>
<body>
    <div id="box"></div>
    <div id="root"></div>
    <div id="div1">
        我是less
        <ul>
            <li></li>
            <li></li>
            <li></li>
            <li></li>
        </ul>
    </div>
    <div id="div2">
        我是scss
        <ul>
            <li></li>
            <li></li>
            <li></li>
            <li></li>
        </ul>
    </div>
</body>
</html>
index.js
import './css/a.css';
import imgSrc from './images/404.jpg';
import './less/a.less';
import './sass/a.scss';

import {a,b} from './js/a.js';
console.log(a,b);

//import $ from 'jquery';

$("#box").css({
	width:'100px',
	height:'100px',
	background:'yellow'
})

let oImg = new Image();

oImg.onload = function(){
	document.body.appendChild(oImg);
};

oImg.src = imgSrc;
.babelrc
{
    "presets": [
        "env"
    ]
}

.gitignore

.DS_Store
node_modules/
/dist/
npm-debug.log*
yarn-debug.log*
yarn-error.log*

# Editor directories and files
.idea
.vscode
*.suo
*.ntvs*
*.njsproj
*.sln
readme.md
	1.进入文件夹
	npm install

	2.构建build
	npm run build

	3.运行webpack-dev-server
	npm run dev
如有任何问题,欢迎加我的公众号留言讨论,谢谢!



猜你喜欢

转载自blog.csdn.net/xyphf/article/details/79776576