webpack简单配置
一、需要的npm
1、webpack三大件
webpack 4.29.0
webpack-cli 3.2.1
webpack-dev-server 3.11.0
2、处理js
处理js ->es6/7/8
6
babel-loader @7.0.0
babel-core
babel-preset-env7
babel-plugin-transform-runtime8
babel-plugin-transform-decorators
babel-plugin-transform-decorators-legacy
3、处理css
处理css样式
1.css处理
css-loader
style-loader2.less处理成css
less-loader
less3.sass处理成css
sass-loader
node-sass4.css兼容问题
postcss-loader 配合 autoprefixer 使用
autoprefixer
4、处理模板
处理模板
ejs-loader 处理ejs、tpl文件 v0.3.5
5、处理html
处理html
html-webpack-plugin v4.5.1
html-loader
二、创建工程目录
src
	- js
		index.js
	- index.html
webpack.config.js	
package.json
三、搭建webpack
1、安装npm相关插件
--save-dev   -D
安装在开发环境下的
--save       -S
安装在生产环境下的
如果没有安装cnpm,可以在后面添加切换下载源
--registry=https://registry.npm.taobao.org
2、配置webpack.config.js
module.exprots = {
    mode:"development",
    entry:{
        index: path.join(__dirname,"./src/js/index.js")
    },
    output:{
        path: path.join(__dirname,"./dist"),
        filename:"js/[name].js"
    },
    module:{
      	rules:[{
            test:/\.js$/,
            loader:"babel-loader",
            exclude:path.join(__dirname,"node_modules")
        },{
            test:/\.css$/,
            use:["style-loader","css-loader"]
        },{
            test:/\.scss$/,
            use:["style-loader","css-loader","sass-loader"]
        },{
            test:/\.tpl$/,
            loader:"ejs-loader"
        }]
    },
    plugins:[
        new HtmlWebPackPlugin({
            filename:index.js,
            template: path.join(__dirname,index.js),
            chunksSortMode: "manual",  /*页面加载脚本的顺序 manual手动*/
            chunks:['index'],
            hash:true,
    	    excludeChunks:['node_modules']
        })
    ],
    devServer:{
        open:true,
        host:"localhost",
        port:"8888"
    }
}
1.mode
打包模式:
development开发模式
production 生产模式。  因为生产所以会进行压缩混淆,删除一些没有用的东西
2.entry
打包的入口文件
entry: path.join(__dirname,Result.js),
打包多个入口函数
entry:{
    index:path.join(__dirname,"./src/js/index.js")
}
3.output
输出文件配置
output:{
    path: path.join(__dirname,"./dist"),  //输出文件的存放位置
    filename:"js/[name].js"      //输出文件的名称
},
4.module
rules(规则):
值是一个数组,数组每一项都是一个规则,就是我们下载npm相关的loader,在这进行相关配置。
 module:{
     rules:[{ 
         test:/\.js$/,  // 不是测试,是一个正则匹配文件
         loader:"babel-loader",  //相关loader   如果多个loader,可以使用use
         exclude:path.join(__dirname,"node_modules")    //排除
     },{
         test:/\.css$/,
         use:["style-loader","css-loader"]
     }]
 }
5.plugin (插件)
HtmlWebpackPlugin:
new HtmlWebPackPlugin({
    minify:{
        removeComments:true,  	 //去除所有的注释
        collapseWhitespace:true  //去除所有空格
    },
    filename:'index.html',    	//指定生成的文件的名称,该文件存在于内存中,在目录中不显示
    template: path.resolve(__dirname,'src/index.html'),   //指定要用到的模板文件
    /*chunks:['index'],   入口文件  */
    files:{   					 //这个页面包含哪些文件 (?)
        js:['js/index.js'],
        chunks:{
            'main':{
                'entry':'dist/bundle.js'
            }
        }    
    },    
    excludeChunks:['node_modules']   /*排除*/
})
6.devServer
启动项
devServer:{
    contentBase:"./",    //用来指定服务器资源的根目录,用来获取静态资源用的。 (?)
    open:true,  	 		//是否启动就打开浏览器
    host:"localhost",    	//域名
    port:"8888"				//端口号
}
3、配置package.json
1.scripts
启动webpack 和 打包
"scripts":{
    "dev": "webpack-dev-server --config webpack.config.js",
    "webpack": "webpack --config webpack.config.js"   
}
四、loader相关配置[早期]
webpack 中 加载器 loader 的基本使用
能处理 css LESS SCSS PostCSS JavaScript Image/Font Vue
1、处理css文件
①运行 npm i style-loader css-loader -D 命令,安装处理css文件的loader
②在 webpack.config.js的 module -> rules 数组中,添加loader 规则如下:
//所有第三方文件模块的匹配规则
    module: {
	rules: [
	    { test: /\.css$/, use: ['style-loader', 'css-loader'] }
	]
    }    
其中,test表示匹配的文件类型,use 表示对应要调用的 loader
2、配置postCSS自动添加css的兼容前缀
①运行 npm i postcss-loader autoprefixer -D命令
②在项目根目录中创建 postcss 的配置文件postcss.config.js,并初始化如下配置:
    
    const autoprefixer = require(' autoprefixer') //导入自动添加前缀的插件
    module.exports = {
        plugins: [ autoprefixer ] // 挂载插件
    }    
③在webpack.config.js的 module -> rules数组中,修改css 的loader 规则如下:
    module: {
        rules: [
            { test:/\.css$/, use: ['style-loader', 'css-loader', 'postcss-loader'] }
        ]
    }   
或者:
    module: {
        rules: [
            { test:/\.css$/, use: ['style-loader', 'css-loader', {
                loader:'postcss-loader',
                options:{
                    plugins:function(){
                        return [autoprefixer('last 5 versions')]
                    }
                }
            }]}
        ]
    } 
3、提起css文件
cnpm i -D mini-css-extract-plugin
const MiniCssExtractPlugin = require("mini-css-extract-plugin");
修改 webpack.config.js 的 module -> rules,把style-loader 替换成 MiniCssExtractPlugin.loader
    module: {
        rules: [
            { test:/\.css$/, use:[
                MiniCssExtractPlugin.loader,  /*提取css*/
                "css-loader",{
                    loader:'postcss-loader',  /*处理css样式*/
                    options: {
                        plugins:function(){
                            return [autoprefixer('last 5 versions')]
                        }
                    }
                }]}
        ]
    }   
在plugins中添加
new MiniCssExtractPlugin({
    filename:"css/[name].css"   /*css前面不要加 / */
})
4、处理less
①运行npm i less-loader less -D命令
②在 webpack.config.js的module -> rules 数组中,添加loader 规则如下:
    //所有第三方文件模块的匹配规则
    module: {
        rules: [
            { test: /\.less$/, use: [ 'style-loader','css-loader', 'less-loader'] }
        ]
    }     
less与 css相比 多了css嵌套,可读性更直观
5、处理scss
① 运行npm i sass-loader node-sass -D命令
② 在 webpack.config.js的module -> rules 数组中,添加loader 规则如下:
    //所有第三方文件模块的匹配规则
    module: {
        rules: [
            { test: /\.scss$/, use: ['style-loader', 'css-loader', 'sass-loader'] }
        ]
    }
6、处理图片文字
① 运行 npm i url-loader file-loader -D命令
② 在 webpack.config.js的 module -> rules 数组中,添加loader 规则如下:
    module: {
        rules: [{
            test:/\.jpg|png|gif|bmp|ttf|eot|svg|woff|woff2$/,
            loader: ['url-loader?limit=16940']
        }]
    }
或者:
    module: {
        rules: [{
            test:/\.jpg|png|gif|bmp|ttf|eot|svg|woff|woff2$/,
            loader:"url-loader",
            options: {
                limit: 8 * 1024,
                outputPath:"img"
            }
        }]
    }
    
    其中?之后的是loader 的参数项。
    limit用来指定图片的大小,单位是字节(byte),只有小于limit大小的图片,才会被转为base64 图片
7、处理html中 img 图片(负责引入img)
① 运行 npm i html-loader -D命令
② 在 webpack.config.js的 module -> rules 数组中,添加loader 规则如下:
    module: {
        rules: [{
            test:/\.html$/,
            /*用来处理html中 img图片的(负责引入img)  */
            loader:"html-loader"
        }]
    }
8、处理js文件中的高级语法
// 相关的包
babel-loader@7   默认安装8版本,不推荐
babel-core
babel-preset-env
babel-plugin-transform-runtime
babel-plugin-transform-decorators
babel-plugin-transform-decorators-legacy
// .babelrc
{
  "presets": ["env"],
  "plugins": [
    "babel-plugin-transform-runtime",
    "transform-decorators-legacy"
  ]
}
// 在webpack.config.js 的module -> rules数组中,添加 loader 规则如下:
    {
        test: /\.js$/,
       	use: 'babel-loader',
        exclude:path.resolve(__dirname,'node_modules')
    }     
五、js高级装饰器
1.装饰器 需要配置 .babelrc 文件,以及相关的包
//相关的包
babel-loader@7   默认安装8版本,不推荐
babel-core
babel-preset-env
babel-plugin-transform-runtime
babel-plugin-transform-decorators
babel-plugin-transform-decorators-legacy
// .babelrc
{
  "presets": ["env"],
  "plugins": [
    "babel-plugin-transform-runtime",
    "transform-decorators-legacy"
  ]
}
2.使用装饰器写的js导出
// compute.js
  export default (target)=>{   /*这里的target指的是调用者(类)*/
    target.prototype.jia = function(a,b){
       return a+b;
    };
  }
3.引入
import compute from "../lib/compute";
4.使用装饰器
@compute
export default class Calculator{
    constructor(){
        this.name = "Calculator";
    }
    init(){
        this.jia(3,5)
    }
    init();
}
控制台就会输出个 8;
 
                    
                
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号