webpack 实用配置总结

1、webpack.config.js配置文件为:

//处理共用、通用的js
var webpack = require(‘webpack‘);
//处理html模板
var htmlWebpackPlugin = require(‘html-webpack-plugin‘);
//css单独打包
var ExtractTextPlugin = require("extract-text-webpack-plugin");

// 获取html-webpack-plugin参数的方法
var getHtmlConfig = function(name, title) {
    return {
        //本地模板文件的位置
        template: ‘./src/view/‘ + name + ‘.html‘,
        //输出文件的目录和文件名称
        filename: ‘view/‘ + name + ‘.html‘,
        //添加特定favicon路径到输出的html文档中
        favicon: ‘./favicon.ico‘,
        //生成的html文档的标题
        title: title,
        //向template或者templateContent中注入所有静态资源,不同的配置值注入的位置不经相同。true或者body:所有JavaScript资源插入到body元素的底部
        inject: true,
        //是否为所有注入的静态资源添加webpack每次编译产生的唯一hash值
        hash: true,
        //允许插入到模板中的一些chunk,不配置此项默认会将entry中所有的thunk注入到模板中。在配置多个页面时,每个页面注入的thunk应该是不相同的,需要通过该配置为不同页面注入不同的thunk;
        chunks: [‘common‘, name]
    };
};

var config = {
    //多页面配置
    entry: {
        //通用模块
        ‘common‘: [‘./src/page/common/index.js‘],
        //登录模块
        ‘login‘: [‘./src/page/login/index.js‘],
        //首页
        ‘index‘: [‘./src/page/index/index.js‘]
    },
    output: {
        //打包后文件存放的地方
        path: __dirname + ‘/dist‘,
        //打包后的文件名
        filename: ‘js/[name].js‘
    },
    //将外部变量或者模块加载进来,并且不将外部变量或者模块编译进文件中
    externals: {
        ‘jquery‘: ‘window.jQuery‘
    },
    module: {
        loaders: [
            //编译ES6
            {
                test: /\.js$/,
                //以下目录不处理
                exclude: /node_modules/,
                //处理以下目录
                include: /src/,
                loader: "babel-loader",
                //配置的目标运行环境自动启用需要的 babel 插件
                query: {
                    presets: [‘latest‘]
                }
            },
            //处理css
            {
                test: /\.css$/,
                //css单独打包
                use: ExtractTextPlugin.extract({
                    fallback: "style-loader",
                    use: [{
                            loader: ‘css-loader‘,
                            options: {
                                //支持@important引入css
                                importLoaders: 1
                            }
                        },
                        {
                            loader: ‘postcss-loader‘,
                            options: {
                                plugins: function() {
                                    return [
                                        //一定要写在require("autoprefixer")前面,否则require("autoprefixer")无效
                                        require(‘postcss-import‘)(),
                                        require("autoprefixer")({
                                            "browsers": ["Android >= 4.1", "iOS >= 7.0", "ie >= 8"]
                                        })
                                    ]
                                }
                            }
                        }
                    ]
                })
            },
            //处理less(同理sass)
            {
                test: /\.less$/,
                //css单独打包
                use: ExtractTextPlugin.extract({
                    fallback: "style-loader",
                    use: [{
                            loader: ‘css-loader‘,
                            options: {
                                //支持@important引入css
                                importLoaders: 1
                            }
                        },
                        {
                            loader: ‘postcss-loader‘,
                            options: {
                                plugins: function() {
                                    return [
                                        //一定要写在require("autoprefixer")前面,否则require("autoprefixer")无效
                                        require(‘postcss-import‘)(),
                                        require("autoprefixer")({
                                            "browsers": ["Android >= 4.1", "iOS >= 7.0", "ie >= 8"]
                                        })
                                    ]
                                }
                            }
                        },
                        ‘less-loader‘
                    ]
                })
            },
            //处理图片
            {
                test: /\.(gif|png|jpg|woff|svg|eot|ttf)\??.*$/i,
                loaders: [
                    //小于8k的图片编译为base64,大于10k的图片使用file-loader
                    ‘url-loader?limit=8192&name=img/[name]-[hash:5].[ext]‘,
                    //图片压缩
                    ‘image-webpack-loader‘
                ]

            }
        ]
    },
    plugins: [
        //html模板处理
        new htmlWebpackPlugin(getHtmlConfig(‘index‘, ‘首页‘)),
        new htmlWebpackPlugin(getHtmlConfig(‘login‘, ‘登录页‘)),
        //通用模块编译到js/common.js
        new webpack.optimize.CommonsChunkPlugin({
            //公共块的块名称
            name: ‘common‘,
            //生成的文件名
            filename: ‘js/common.js‘
        }),
        //css单独打
        new ExtractTextPlugin(‘css/[name].css‘)
    ]
}
module.exports = config;

2、package.json文件为:

{
  "name": "webpack",
  "version": "1.0.0",
  "main": "bundle.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "webpack": "webpack --config webpack.config.js --progress --display-modules --colors --display-reasons"
  },
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "autoprefixer": "^7.1.4",
    "babel-core": "^6.26.0",
    "babel-loader": "^7.1.2",
    "babel-preset-latest": "^6.24.1",
    "css-loader": "^0.28.7",
    "ejs-loader": "^0.3.0",
    "extract-text-webpack-plugin": "^3.0.0",
    "file-loader": "^0.11.2",
    "html-loader": "^0.5.1",
    "html-webpack-plugin": "^2.30.1",
    "image-webpack-loader": "^3.4.2",
    "less": "^2.7.2",
    "less-loader": "^4.0.5",
    "postcss-import": "^10.0.0",
    "postcss-loader": "^2.0.6",
    "style-loader": "^0.18.2",
    "url-loader": "^0.5.9",
    "webpack": "^3.5.6",
    "webpack-dev-server": "^2.8.2"
  },
  "dependencies": {
    "acorn": "^5.1.2",
    "acorn-dynamic-import": "^2.0.2",
    "ajv": "^5.2.2",
    "ajv-keywords": "^2.1.0",
    "align-text": "^0.1.4",
    "ansi-regex": "^3.0.0",
    "anymatch": "^1.3.2",
    "arr-diff": "^2.0.0",
    "arr-flatten": "^1.1.0",
    "array-unique": "^0.2.1",
    "asn1.js": "^4.9.1",
    "assert": "^1.4.1",
    "async": "^2.5.0",
    "async-each": "^1.0.1",
    "balanced-match": "^1.0.0",
    "base64-js": "^1.2.1",
    "big.js": "^3.1.3",
    "binary-extensions": "^1.10.0",
    "bn.js": "^4.11.8",
    "brace-expansion": "^1.1.8",
    "braces": "^1.8.5",
    "brorand": "^1.1.0",
    "browserify-aes": "^1.0.8",
    "browserify-cipher": "^1.0.0",
    "browserify-des": "^1.0.0",
    "browserify-rsa": "^4.0.1",
    "browserify-sign": "^4.0.4",
    "browserify-zlib": "^0.1.4",
    "buffer": "^4.9.1",
    "buffer-xor": "^1.0.3",
    "builtin-modules": "^1.1.1",
    "builtin-status-codes": "^3.0.0",
    "camelcase": "^4.1.0",
    "center-align": "^0.1.3",
    "chokidar": "^1.7.0",
    "cipher-base": "^1.0.4",
    "cliui": "^3.2.0",
    "co": "^4.6.0",
    "code-point-at": "^1.1.0",
    "concat-map": "^0.0.1",
    "console-browserify": "^1.1.0",
    "constants-browserify": "^1.0.0",
    "core-util-is": "^1.0.2",
    "create-ecdh": "^4.0.0",
    "create-hash": "^1.1.3",
    "create-hmac": "^1.1.6",
    "cross-spawn": "^5.1.0",
    "crypto-browserify": "^3.11.1",
    "d": "^1.0.0",
    "date-now": "^0.1.4",
    "decamelize": "^1.2.0",
    "des.js": "^1.0.0",
    "diffie-hellman": "^5.0.2",
    "domain-browser": "^1.1.7",
    "elliptic": "^6.4.0",
    "emojis-list": "^2.1.0",
    "enhanced-resolve": "^3.4.1",
    "errno": "^0.1.4",
    "error-ex": "^1.3.1",
    "es5-ext": "^0.10.30",
    "es6-iterator": "^2.0.1",
    "es6-map": "^0.1.5",
    "es6-set": "^0.1.5",
    "es6-symbol": "^3.1.1",
    "es6-weak-map": "^2.0.2",
    "escope": "^3.6.0",
    "esrecurse": "^4.2.0",
    "estraverse": "^4.2.0",
    "event-emitter": "^0.3.5",
    "events": "^1.1.1",
    "evp_bytestokey": "^1.0.3",
    "execa": "^0.7.0",
    "expand-brackets": "^0.1.5",
    "expand-range": "^1.8.2",
    "extglob": "^0.3.2",
    "fast-deep-equal": "^1.0.0",
    "filename-regex": "^2.0.1",
    "fill-range": "^2.2.3",
    "find-up": "^2.1.0",
    "for-in": "^1.0.2",
    "for-own": "^0.1.5",
    "fsevents": "^1.1.2",
    "get-caller-file": "^1.0.2",
    "get-stream": "^3.0.0",
    "glob-base": "^0.3.0",
    "glob-parent": "^2.0.0",
    "graceful-fs": "^4.1.11",
    "has-flag": "^2.0.0",
    "hash-base": "^3.0.4",
    "hash.js": "^1.1.3",
    "hmac-drbg": "^1.0.1",
    "hosted-git-info": "^2.5.0",
    "https-browserify": "^0.0.1",
    "ieee754": "^1.1.8",
    "indexof": "^0.0.1",
    "inherits": "^2.0.3",
    "interpret": "^1.0.3",
    "invert-kv": "^1.0.0",
    "is-arrayish": "^0.2.1",
    "is-binary-path": "^1.0.1",
    "is-buffer": "^1.1.5",
    "is-builtin-module": "^1.0.0",
    "is-dotfile": "^1.0.3",
    "is-equal-shallow": "^0.1.3",
    "is-extendable": "^0.1.1",
    "is-extglob": "^1.0.0",
    "is-fullwidth-code-point": "^2.0.0",
    "is-glob": "^2.0.1",
    "is-number": "^3.0.0",
    "is-posix-bracket": "^0.1.1",
    "is-primitive": "^2.0.0",
    "is-stream": "^1.1.0",
    "isarray": "^1.0.0",
    "isexe": "^2.0.0",
    "isobject": "^2.1.0",
    "jquery": "^3.2.1",
    "json-loader": "^0.5.7",
    "json-schema-traverse": "^0.3.1",
    "json-stable-stringify": "^1.0.1",
    "json5": "^0.5.1",
    "jsonify": "^0.0.0",
    "kind-of": "^4.0.0",
    "lazy-cache": "^1.0.4",
    "lcid": "^1.0.0",
    "load-json-file": "^2.0.0",
    "loader-runner": "^2.3.0",
    "loader-utils": "^1.1.0",
    "locate-path": "^2.0.0",
    "lodash": "^4.17.4",
    "longest": "^1.0.1",
    "lru-cache": "^4.1.1",
    "md5.js": "^1.3.4",
    "mem": "^1.1.0",
    "memory-fs": "^0.4.1",
    "micromatch": "^2.3.11",
    "miller-rabin": "^4.0.0",
    "mimic-fn": "^1.1.0",
    "minimalistic-assert": "^1.0.0",
    "minimalistic-crypto-utils": "^1.0.1",
    "minimatch": "^3.0.4",
    "minimist": "^0.0.8",
    "mkdirp": "^0.5.1",
    "node-libs-browser": "^2.0.0",
    "normalize-package-data": "^2.4.0",
    "normalize-path": "^2.1.1",
    "npm-run-path": "^2.0.2",
    "number-is-nan": "^1.0.1",
    "object-assign": "^4.1.1",
    "object.omit": "^2.0.1",
    "os-browserify": "^0.2.1",
    "os-locale": "^2.1.0",
    "p-finally": "^1.0.0",
    "p-limit": "^1.1.0",
    "p-locate": "^2.0.0",
    "pako": "^0.2.9",
    "parse-asn1": "^5.1.0",
    "parse-glob": "^3.0.4",
    "parse-json": "^2.2.0",
    "path-browserify": "^0.0.0",
    "path-exists": "^3.0.0",
    "path-is-absolute": "^1.0.1",
    "path-key": "^2.0.1",
    "path-type": "^2.0.0",
    "pbkdf2": "^3.0.14",
    "pify": "^2.3.0",
    "preserve": "^0.2.0",
    "process": "^0.11.10",
    "process-nextick-args": "^1.0.7",
    "prr": "^0.0.0",
    "pseudomap": "^1.0.2",
    "public-encrypt": "^4.0.0",
    "punycode": "^1.4.1",
    "querystring": "^0.2.0",
    "querystring-es3": "^0.2.1",
    "randomatic": "^1.1.7",
    "randombytes": "^2.0.5",
    "read-pkg": "^2.0.0",
    "read-pkg-up": "^2.0.0",
    "readable-stream": "^2.3.3",
    "readdirp": "^2.1.0",
    "regex-cache": "^0.4.4",
    "remove-trailing-separator": "^1.1.0",
    "repeat-element": "^1.1.2",
    "repeat-string": "^1.6.1",
    "require-directory": "^2.1.1",
    "require-main-filename": "^1.0.1",
    "right-align": "^0.1.3",
    "ripemd160": "^2.0.1",
    "safe-buffer": "^5.1.1",
    "semver": "^5.4.1",
    "set-blocking": "^2.0.0",
    "set-immediate-shim": "^1.0.1",
    "setimmediate": "^1.0.5",
    "sha.js": "^2.4.8",
    "shebang-command": "^1.2.0",
    "shebang-regex": "^1.0.0",
    "signal-exit": "^3.0.2",
    "source-list-map": "^2.0.0",
    "source-map": "^0.5.7",
    "spdx-correct": "^1.0.2",
    "spdx-expression-parse": "^1.0.4",
    "spdx-license-ids": "^1.2.2",
    "stream-browserify": "^2.0.1",
    "stream-http": "^2.7.2",
    "string-width": "^2.1.1",
    "string_decoder": "^1.0.3",
    "strip-ansi": "^4.0.0",
    "strip-bom": "^3.0.0",
    "strip-eof": "^1.0.0",
    "supports-color": "^4.4.0",
    "tapable": "^0.2.8",
    "timers-browserify": "^2.0.4",
    "to-arraybuffer": "^1.0.1",
    "tty-browserify": "^0.0.0",
    "uglify-js": "^2.8.29",
    "uglify-to-browserify": "^1.0.2",
    "uglifyjs-webpack-plugin": "^0.4.6",
    "url": "^0.11.0",
    "util": "^0.10.3",
    "util-deprecate": "^1.0.2",
    "validate-npm-package-license": "^3.0.1",
    "vm-browserify": "^0.0.4",
    "watchpack": "^1.4.0",
    "webpack": "^3.5.6",
    "webpack-sources": "^1.0.1",
    "which": "^1.3.0",
    "which-module": "^2.0.0",
    "window-size": "^0.1.0",
    "wordwrap": "^0.0.2",
    "wrap-ansi": "^2.1.0",
    "xtend": "^4.0.1",
    "y18n": "^3.2.1",
    "yallist": "^2.1.2",
    "yargs": "^8.0.2",
    "yargs-parser": "^7.0.0"
  },
  "description": ""
}

3、命令行:

npm run webpack
时间: 2024-11-18 18:04:30

webpack 实用配置总结的相关文章

webpack实用配置

前面的话 上文介绍了webpack入门,本文将详细介绍webpack实用配置 版本号 以entry.js打包为bundle.js为例,出口的filename可以设置为[id].[name].[hash].[chunkhash]等替换形式,如下所示 var webpack = require('webpack'); module.exports = { entry: './entry.js', //入口文件 output: { path: __dirname,//出口路径 filename: '[

webpack安装配置使用教程详解

webpack安装配置使用教程详解 www.111cn.net 更新:2015-09-01 编辑:swteen 来源:转载 本文章来为各位详细的介绍一下关于webpack安装配置使用教程吧,这篇文章对于不喜欢使用 jspm测试的朋友可以参考一下. webpack 入门 目录 1 安装 webpack2 初始化项目3 webpack 配置4 自动刷新5 第三方库6 模块化7 打包.构建8 webpack 模板我最近大量使用的是 jspm,但因为用它搭建的前端开发环境中,写测试代码非常困难,而项目又

vue 一些webpack的配置详解

最近一直在忙着做项目 本来想养成一个经常跟新博客的习惯 , 但是实在是太难了 , 每天加班到10点多 .8点能下班都是最好的了 , 小公司真不好待呀 分享一下最近半年的vue心得吧 我的项目是在他的基础上改的 PanJiaChen/vueAdmin-template vuex 咋web上我觉得是鸡肋 , 用户刷新页面直接就没了........... 这是我的目录 , 现在我遇到一个瓶颈  , 就是如何优化 build 的速度问题 , 这个问题随着页面原来越多已经发展到越来越恐怖的地方了现在打包一

webpack详细配置解析

阅读本文之前,先看下面这个webpack的配置文件,如果每一项你都懂,那本文能带给你的收获也许就比较有限,你可以快速浏览或直接跳过:如果你和十天前的我一样,对很多选项存在着疑惑,那花一段时间慢慢阅读本文,你的疑惑一定一个一个都会消失:如果你以前没怎么接触过Webpack,而你又你对webpack感兴趣,那么动手跟着本文中那个贯穿始终的例子写一次,写完以后你会发现你已明明白白的走进了Webpack的大门. //一个常见的Webpack配置文件 var webpack = require('webp

webpack基础配置

现今的很多网页其实可以看做是功能丰富的应用,它们拥有着复杂的JavaScript代码和一大堆依赖包.为了简化开发的复杂度,前端社区涌现出了很多好的实践方法 模块化,让我们可以把复杂的程序细化为小的文件; 类似于TypeScript这种在JavaScript基础上拓展的开发语言:使我们能够实现目前版本的JavaScript不能直接使用的特性,并且之后还能转换为JavaScript文件使浏览器可以识别: Scss,less等CSS预处理器 ... 这些改进确实大大的提高了我们的开发效率,但是利用它们

Vue2+webpack+node 配置+入门+详解

Vue2介绍 1.vue2.0 Vue (读音 /vju?/,类似于 view) 是一套用于构建用户界面的渐进式框架. Vue 的核心库只关注视图层 采用单文件组件 复杂大型单页应用程序(SPA) 响应式的数据绑定,与组件化的开发 HTML中的DOM与其他的部分独立开来划分出一个层次,这个层次就叫做视图层 2.Webpack Webpack是一个前端打包和构建工具. webpack有四个核心概念: 入口(entry)指示 webpack 应该使用哪个模块,来作为构建其内部依赖图的开始.可以单个入

在webpack中配置vue.js

在webpack中配置vue.js 这里有两种在webpack中配置vue.js的方法,如下: 1.在main.js中引入vue的包: index.html: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width,

深入理解webpack基本配置(一)

1. 安装webpack到全局 在学习构建之前,我们来在本地文件新建一个存放项目的文件夹,比如叫demo1这个项目,然后进入demo1该项目的根目录后,执行命令 npm init运行下,一路回车(先简单的来),就会生成一个package.json文件. 在项目中直接运行如下命令,就可以把webpack安装到全局去:如下命令: npm install -g webpack 2. 安装webpack到本项目. 在本项目中,执行如下命令,就可以把webpack安装到本地项目中,如下命令: npm in

webpack4.0:webpack基础配置

webpack安装 npm i webpack webpack-cli -D npm init -y 初始化,-y参数代表init的过程中不必敲回车,直接生成默认的package.json文件 配置webpack 默认配置文件名:webpack.config.js 新建webpack.config.js文件,配置如下: 新建src文件夹,在src下 新建index.js入口文件,随便输入点东西 执行打包命令:npx webpack,就会生成一个dist目录(为啥打包后的文件名不是我配置的bund