【webpack4】基本配置和入门api

const path = require('path');
var htmlWebpackPlugin = require('html-webpack-plugin');

module.exports = {
    mode: 'production',
    entry: {
        a: './src/index.js',
        b: './src/a.js'//入口文件
    },
    optimization:{ //拆分模块,公共模块提取
        splitChunks:{
            chunks:"all"
        }
    },
    output: {
        path: path.resolve(__dirname, 'dist'),//通过HtmlWebpackPlugin插件生成的html文件存放在这个目录下面
        filename: '[name].js',//主入口的文件名
        chunkFilename: '[id].bundle.js'//非主入口的文件名
    },
    module: {
        rules: [
            {
                test: /\.css$/,
                use: [
                    'style-loader',
                    'css-loader'
                ]
            },
            {
                test: /\.(png|svg|jpg|gif)$/,
                use: [
                    'file-loader?name=img/[name].[hash:6].[ext]' 
                ]
            }
        ]
    },
    plugins: [ //生产index.html插件
        new htmlWebpackPlugin({
            filename: 'index.html',
            template: './src/index.html',
            inject: 'true',
            // chunks:['manifest','a']
           
        })
    ]
};

Node.js

Path

var path = require("path");

path.join([path1][, path2][, ...])//用于连接路径。该方法的主要用途在于,会正确使用当前系统的路径分隔符,Unix系统是"/",Windows系统是"\"。

path.resolve(from, to)//用于将相对路径转为绝对路径。

全局对象

global //最根本的作用是作为全局变量的宿主。

__filename //表示当前正在执行的脚本的文件名。它将输出文件所在位置的绝对路径,且和命令行参数所指定的文件名不一定相同。 如果在模块中,返回的值是模块文件的路径。

__dirname //表示当前执行脚本所在的目录。

"build": "rm -rf dist && atool-build && mkdir -p dist/${npm_package_name}/${npm_package_version} && mv dist/*.* dist/${npm_package_name}/${npm_package_version}/"

常用插件

html-webpack-plugin

自动生成html插件

autoprefixer

自动检测兼容性给各个浏览器加个css内核前缀的插件

copy-webpack-plugin

拷贝资源插件

cnpm install --save-dev copy-webpack-plugin

new CopyWebpackPlugin([{
    from: __dirname + '/src/public'
}]),

webpack.ProvidePlugin [webpack内置插件 ]

全局挂载插件

uglifyjs-webpack-plugin

压缩js

DefinePlugin

new webpack.DefinePlugin(definitions)

DefinePlugin可以在编译时期创建全局变量。
该特性适用于开发版本同线上版本在某些常量上有区别的场景。
比如,可能会通过全局变量定义是否需要打印日志,在开发版中打印日志,
而在先上版本不打印日志。

// webpack.config.js
plugins:[
      new webpack.DefinePlugin({
        // 全局debug标识
        __DEV__: debug,
    }),

]
new webpack.DefinePlugin({
 PRODUCTION: JSON.stringify(true),
 VERSION: JSON.stringify("5fa3b9"),
 BROWSER_SUPPORTS_HTML5: true,
 TWO: "1+1",
 "typeof window": JSON.stringify("object")
})

console.log("Running App version " + VERSION);
if(!BROWSER_SUPPORTS_HTML5) require("html5shiv");

相关推荐