欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

webpack入门,配置实例

程序员文章站 2024-03-25 10:01:46
...

结构:
webpack入门,配置实例
webpack.config.js

// webpack.config.js
const webpack = require ("webpack");
const HtmlWebpackPlugin = require('html-webpack-plugin');
module.exports = {
    // entry: {
    //     main:__dirname + '/src/main.js', // 对象方式最可拓展,多页面应用,第三方库分离均可用
    // },
    entry:__dirname + '/src/main.js', // 入口文件路径
    // output: {
    //     filename: '[name].js',
    //     path: __dirname + '/dist'//如果配置创建了多个单独的 "chunk"(例如,使用多个入口起点或使用像 CommonsChunkPlugin 这样的插件),则应该使用占位符(substitutions)来确保每个文件具有唯一的名称。
    //   },
    output: {
        path: __dirname + '/dist/', // 存放打包后文件的路径
        filename: 'bundle.js'   // 打包后文件名
    },
    devtool: 'source-map', // 配置生成的source-map
    devServer: {//devServer配置
        contentBase: './dist',//默认 webpack-dev-server 会为根文件夹提供本地服务器,如果想为另外一个目录下的文件提供本地服务器,应该在这里设置其所在目录.
        host:'localhost',
        port: '9000',//设置默认监听端口,如果省略,默认为"8080".
        inline: true,//当源文件改变时会自动刷新页面.
        historyApiFallback: true,//在开发单页应用时非常有用,它依赖于 HTML5 history API,如果设置为 true,所有的错误跳转将指向 index.html.
        // watchOptions: {
        //     aggregateTimeout: 2000,//浏览器延迟多少秒更新
        //     poll: 1000//每秒检查一次变动
        // },
        hot:true,//启动热更新,必须搭配new webpack.HotModuleReplacementPlugin()插件
        open: true//直接打开浏览器
    },
    plugins: [
        new HtmlWebpackPlugin({
            template: __dirname + '/src/index.html' // new一个插件的实例,并传入相关的参数
        }),
        new webpack.HotModuleReplacementPlugin(),
        //new webpack.NamedModulesPlugin(), //添加,官方推荐的帮助分析依赖的插件
        // new CleanWebpackPligin("./dist", {
        //     exclude: ["index.html"]
        //   })
        // new HtmlWebpackPlugin({
        //     template:"index.html",
        //     title:'index',
        //     inject: true
        // }),
        // new webpack.NamedModulesPlugin(), 
        // HMR shows correct file names in console on update.
        // new webpack.NoEmitOnErrorsPlugin()
    ],
    module: {//loader 用于对模块的源代码进行转换
        rules: [
            {
                test: /\.js$/,
                loader: 'babel-loader',
                exclude: /node_modules/, // 编译打包时排除node_modules文件夹
                // query: {
                //     presets: ['es2015']//有@babel/preset-env后不需要此项配置
                // }
            },
            // {
            //     test: /\.css$/,
            //     use: [
            //         { loader: 'style-loader'},
            //         {
            //             loader: 'css-loader?modules',// 此处多加了一个?modules,l类名会被编译成hash字符串
            //             options: { modules: true }
            //         }
            //     ]
            // }
            {
                test: /\.css$/,
                use: [
                    // 'style-loader', 'css-loader?modules&importLoaders=1',//importLoader写在potions里
                    // {loader:'style-loader'},
                    // {loader:'css-loader?modules'},
                    'style-loader', 'css-loader?modules',//上两行的简写
                    {
                        loader: 'postcss-loader',
                        options: {
                            importLoaders: 1,
                            plugins: [
                                require('autoprefixer')//根据浏览器添加前缀(npm install --save-dev postcss-loader autoprefixer)
                            ]
                        }
                    }
                ]
            }
        ]
    }
};

package.json

{
  "name": "study",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "start": "webpack-dev-server",
    "build": "webpack --config ./webpack.prod.config.js --progress"
  },
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "@babel/core": "^7.10.5",
    "autoprefixer": "^9.8.5",
    "babel-core": "^6.26.3",
    "babel-loader": "^8.1.0",
    "babel-preset-es2015": "^6.24.1",
    "css-loader": "^3.6.0",
    "html-webpack-plugin": "^4.3.0",
    "postcss-loader": "^3.0.0",
    "style-loader": "^1.2.1",
    "webpack": "^4.43.0",
    "webpack-cli": "^3.3.12",
    "webpack-dev-server": "^3.11.0"
  }
}

postcss.config.js

// postcss.config.js
module.exports = {
    plugins: [
        // 调用autoprefixer插件,还可以配置选项添加需要兼容的浏览器版本.
        require("autoprefixer")[{ browsers: ['ie>=8', '>1% in CN'] }]
    ]
}

webpack.prod.config.js

// webpack.prod.config.js
var webpack = require('webpack');
var HtmlWebpackPlugin = require('html-webpack-plugin');
module.exports = {
    entry: __dirname + '/src/main.js', // 入口文件路径文件所在的目录.
    output: {
        path: __dirname + '/build/',    // 存放打包后文件的路径
        filename: 'bundle.js'   // 打包后文件名
    },
    module: {
        rules: [
            {
                test: /\.js$/,
                loader: 'babel-loader',
                exclude: /node_modules/ // 编译打包时排除node_modules文件夹
            },
            {
                test: /\.css$/,
                // 此处结构需要做一下修改
                use: [
                    'style-loader', 'css-loader',
                    {
                        loader: 'postcss-loader',
                        options: {
                            importLoaders: 1,
                            plugins: [
                                require('autoprefixer')
                            ]
                        }
                    }
                ]
            }
        ]
    },
    plugins: [
        new HtmlWebpackPlugin({
            template: __dirname + '/src/index.html' // new一个插件的实例,并传入相关的参数
        })
    ]
};
相关标签: 踩过的坑