视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
关于webpack的详细介绍
2020-11-27 20:20:25 责编:小采
文档
 Webpack是前端一个工具,可以让各个模块进行加载,预处理,再进行打包,它能有Grunt或Gulp所有基本功能。

之前使用的是gulp ,进行页面的css和js,打包压缩,配置简单,但是太过琐碎麻烦,使用sass时,直接在sass里导入sass文件,容易报错(不知道怎么回事)

webpack吸引我的地方:模块化,按需加载,压缩css,内嵌样式,样式。压缩js,压缩页面

参考文章:(1.0版本)

学习视频:(1.0版本)

自己安装webpack版本2.0(有些地方需要注意)

一. 安装

安装测试node和npm

1 $ node -v2 v6.11.0
$ npm -v3.10.10

新建文件夹webpack,,进入项目目录webpack,进行安装:

1,使用npm init -y生成package.json文件

npm init -y

2,安装webpack(貌似全局安装webpack,可以直接在命令行输入webpack进行打包)

//全局安装
npm install -g webpack
//安装到你的项目目录
npm install --save-dev webpack

 测试webpack版本为:$ webpack -v 2.6.1

配置命令

这是在 package.json 文件中配置的

"scripts": {"build": "webpack --profile --progress --colors --display-error-details","dev": "webpack --display-modules --profile --progress --colors --display-error-details","dev-hrm": "webpack-dev-server --config"
 },
  • color 输出结果带彩色,比如:会用红色显示耗时较长的步骤

  • profile 输出性能数据,可以看到每一步的耗时

  • progress 输出当前编译的进度,以百分比的形式呈现

  • display-modules 默认情况下 node_modules 下的模块会被隐藏,加上这个参数可以显示这些被隐藏的模块

  • display-error-details 输出详细的错误信息

  • webpack-dev-server 将会开启热更新

  • 更多请参考官网 cli

  • // 开发模式npm run dev// 热更新模式npm run dev-hrm// 发布模式npm run build

    二. 配置

    新建webpack.config.js

    module.exports = {

      entry:{
        main:"./src/app.js?1.1.11",
      } ,//已多次提及的唯一入口文件

    + "/dist",filename: "js/[name].js?1.1.11",

    HtmlWebpackPlugin

    依据一个简单的模板,帮你生成最终的Html5文件

    npm install --save-dev html-webpack-plugin
     plugins:[new htmlWebpackPlugin({
     filename:'index.html',
     template:'index.html',
     inject:'body',
     title:'首页',
     }),
     ]

    Loaders

    鼎鼎大名的Loaders登场了!

    Loaders是webpack中最让人激动人心的功能之一了。通过使用不同的loader,webpack通过调用外部的脚本或工具可以对各种各样的格式的文件进行处理,比如说分析JSON文件并把它转换为JavaScript文件,或者说把下一代的JS文件(ES6,ES7)转换为现代浏览器可以识别的JS文件。或者说对React的开发而言,合适的Loaders可以把React的JSX文件转换为JS文件。


    Loaders需要单独安装并且需要在webpack.config.js下的modules关键字下进行配置,Loaders的配置选项包括以下几方面:


  • test:一个匹配loaders所处理的文件的拓展名的正则表达式(必须)

  • loader:loader的名称(必须)

  • include/exclude:手动添加必须处理的文件(文件夹)或屏蔽不需要处理的文件(文件夹)(可选);

  • query:为loaders提供额外的设置选项(可选)

  • Babel

    Babel其实是一个编译JavaScript的平台,它的强大之处表现在可以通过编译帮你达到以下目的:


  • 下一代的JavaScript标准(ES6,ES7),这些标准目前并未被当前的浏览器完全的支持;

  • 使用基于JavaScript进行了拓展的语言,比如React的JSX

  • // npm一次性安装多个依赖模块,模块之间用空格隔开npm install --save-dev babel-core babel-loader babel-preset-es2015 babel-preset-react
    {
     test: /\.js$/,
     loader: 'babel-loader',
     include: path.resolve(__dirname,'src'),
     exclude: path.resolve(__dirname,'node_modules'),
     query:{
     presets:["es2015"]
     }
     }

    CSS,CSS预处理器

    首先安装postcss-loader 和 autoprefixer(自动添加前缀的插件)

    npm install --save-dev style-loader css-loader
    {
     test:/\.css$/,
     loader: [ 'style-loader',
     { loader: 'css-loader', options: { importLoaders: 1 } }, 'postcss-loader']
     }
    npm install --save-dev less-loader less
    npm install --save-dev postcss-loader autoprefixer

    在完成一系列的操作后

    package.json:

    { "name": "webpack", "version": "1.0.0", "main": "index.js?1.1.11", "scripts": {"test": "echo \"Error: no test specified\" && exit 1","webpack": "webpack --config webpack.config.js --progress --display-module --colors"
     }, "keywords": [], "author": "", "license": "ISC", "devDependencies": {"autoprefixer": "^7.1.1","babel-core": "^6.25.0","babel-loader": "^7.0.0","babel-preset-es2015": "^6.24.1","babel-preset-latest": "^6.24.1","babel-preset-react": "^6.24.1","css-loader": "^0.28.4","file-loader": "^0.11.2","html-loader": "^0.4.5","html-minify-loader": "^1.1.0","html-webpack-plugin": "^2.28.0","image-webpack-loader": "^3.3.1","less": "^2.7.2","less-loader": "^4.0.4","postcss-loader": "^2.0.5","style-loader": "^0.18.2","url-loader": "^0.5.9","webpack": "^2.6.1"
     }, "dependencies": {"acorn": "^5.0.3","acorn-dynamic-import": "^2.0.2","ajv": "^4.11.8","anymatch": "^1.3.0","align-text": "^0.1.4","arr-diff": "^2.0.0","arr-flatten": "^1.0.3","array-unique": "^0.2.1","arrify": "^1.0.1","asn1.js?1.1.11": "^4.9.1","async": "^2.4.1","async-each": "^1.0.1","balanced-match": "^1.0.0","base-js": "^1.2.0","binary-extensions": "^1.8.0","bn.js?1.1.11": "^4.11.6","brace-expansion": "^1.1.8","braces": "^1.8.5","brorand": "^1.1.0","browserify-aes": "^1.0.6","browserify-cipher": "^1.0.0","browserify-des": "^1.0.0","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": "^3.0.0","center-align": "^0.1.3","chokidar": "^1.7.0","cipher-base": "^1.0.3","co": "^4.6.0","cliui": "^3.2.0","browserify-rsa": "^4.0.1","code-point-at": "^1.1.0","assert": "^1.4.1","concat-map": "^0.0.1","console-browserify": "^1.1.0","constants-browserify": "^1.0.0","create-hmac": "^1.1.6","create-ecdh": "^4.0.0","crypto-browserify": "^3.11.0","create-hash": "^1.1.3","date-now": "^0.1.4","decamelize": "^1.2.0","des.js?1.1.11": "^1.0.0","diffie-hellman": "^5.0.2","domain-browser": "^1.1.7","elliptic": "^6.4.0","enhanced-resolve": "^3.1.0","errno": "^0.1.4","events": "^1.1.1","error-ex": "^1.3.1","expand-brackets": "^0.1.5","expand-range": "^1.8.2","extglob": "^0.3.2","filename-regex": "^2.0.1","fill-range": "^2.2.3","find-up": "^1.1.2","for-own": "^0.1.5","evp_bytestokey": "^1.0.0","get-caller-file": "^1.0.2","fsevents": "^1.1.1","glob-base": "^0.3.0","for-in": "^1.0.2","glob-parent": "^2.0.0","graceful-fs": "^4.1.11","has-flag": "^1.0.0","hash.js?1.1.11": "^1.0.3","hash-base": "^2.0.2","hmac-drbg": "^1.0.1","hosted-git-info": "^2.4.2","html-webpack-plugin": "^2.28.0","https-browserify": "^0.0.1","ieee754": "^1.1.8","ajv-keywords": "^1.5.1","indexof": "^0.0.1","invert-kv": "^1.0.0","interpret": "^1.0.3","is-arrayish": "^0.2.1","is-binary-path": "^1.0.1","is-buffer": "^1.1.5","is-dotfile": "^1.0.3","is-builtin-module": "^1.0.0","is-equal-shallow": "^0.1.3","is-extendable": "^0.1.1","is-extglob": "^1.0.0","is-fullwidth-code-point": "^1.0.0","is-glob": "^2.0.1","is-number": "^3.0.0","is-posix-bracket": "^0.1.1","is-primitive": "^2.0.0","is-utf8": "^0.2.1","json-loader": "^0.5.4","json-stable-stringify": "^1.0.1","jsonify": "^0.0.0","kind-of": "^4.0.0","isobject": "^2.1.0","lazy-cache": "^1.0.4","lcid": "^1.0.0","load-json-file": "^1.1.0","loader-runner": "^2.3.0","longest": "^1.0.1","micromatch": "^2.3.11","memory-fs": "^0.4.1","minimalistic-assert": "^1.0.0","miller-rabin": "^4.0.0","minimalistic-crypto-utils": "^1.0.1","minimatch": "^3.0.4","mkdirp": "^0.5.1","minimist": "^0.0.8","node-libs-browser": "^2.0.0","normalize-path": "^2.1.1","object.omit": "^2.0.1","number-is-nan": "^1.0.1","os-browserify": "^0.2.1","os-locale": "^1.4.0","normalize-package-data": "^2.3.8","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": "^2.1.0","path-type": "^1.1.0","pbkdf2": "^3.0.12","pify": "^2.3.0","path-is-absolute": "^1.0.1","pinkie": "^2.0.4","pinkie-promise": "^2.0.1","preserve": "^0.2.0","process": "^0.11.10","process-nextick-args": "^1.0.7","prr": "^0.0.0","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": "^1.1.0","read-pkg-up": "^1.0.1","readdirp": "^2.1.0","regex-cache": "^0.4.3","repeat-element": "^1.1.2","repeat-string": "^1.6.1","require-directory": "^2.1.1","right-align": "^0.1.3","require-main-filename": "^1.0.1","remove-trailing-separator": "^1.0.2","safe-buffer": "^5.1.0","ripemd160": "^2.0.1","semver": "^5.3.0","set-immediate-shim": "^1.0.1","set-blocking": "^2.0.0","setimmediate": "^1.0.5","sha.js?1.1.11": "^2.4.8","source-list-map": "^1.1.2","spdx-correct": "^1.0.2","spdx-license-ids": "^1.2.2","stream-browserify": "^2.0.1","spdx-expression-parse": "^1.0.4","stream-http": "^2.7.1","string-width": "^1.0.2","strip-bom": "^2.0.0","supports-color": "^3.2.3","timers-browserify": "^2.0.2","tapable": "^0.2.6","to-arraybuffer": "^1.0.1","tty-browserify": "^0.0.0","uglify-to-browserify": "^1.0.2","util": "^0.10.3","url": "^0.11.0","validate-npm-package-license": "^3.0.1","util-deprecate": "^1.0.2","vm-browserify": "^0.0.4","watchpack": "^1.3.1","webpack-sources": "^0.2.3","webpack": "^2.6.1","which-module": "^1.0.0","window-size": "^0.1.0","wordwrap": "^0.0.2","wrap-ansi": "^2.1.0","xtend": "^4.0.1","y18n": "^3.2.1","yargs": "^6.6.0","yargs-parser": "^4.2.1"
     }, "description": ""}
    View Code

    webpack.config.js

    var htmlWebpackPlugin = require('html-webpack-plugin');var path = require('path');
    
    module.exports = {
     entry:{
     main:"./src/app.js?1.1.11",
     } ,
     output:{
     path:__dirname+'/dist',
     filename:'js/[name].bundle.js',//publicPath:'http://hotdeals.com/' },
     module:{
     loaders:[
     {
     test: /\.js$/,
     loader: 'babel-loader',
     include: path.resolve(__dirname,'src'),
     exclude: path.resolve(__dirname,'node_modules'),
     query:{
     presets:["es2015"]
     }
     },{
     test:/\.html/,
     loader:'html-loader' },
     {
     test:/\.css$/,
     loader: [ 'style-loader',
     { loader: 'css-loader', options: { importLoaders: 1 } }, 'postcss-loader']
     },{
     test:/\.less$/,
     loader:'style-loader!css-loader!postcss-loader!less-loader' },
     {
     test:/\.(jpe?g|png|gif|svg)$/i,
     loaders:[ 'file-loader?limit=200&name=assets/[name]-[hash:5].[ext]',
     {
     loader: 'image-webpack-loader',
     query: {
     progressive: true,
     optimizationLevel: 7,
     interlaced: false,
     pngquant: {
     quality: '65-90',
     speed: 4 }
     }
     }
     ],
     },
     ]
    
     },
    
     plugins:[new htmlWebpackPlugin({
     filename:'index.html',
     template:'index.html',
     inject:'body',
     title:'首页',
     }),
     ]
    }
    View Code

    postcss.config.js(webpack2.0使用css添加前缀,看官网更好)

    module.exports = {
     plugins: {'autoprefixer': {},
     }
    }
    View Code

    项目文件:

    index.html

    <!DOCTYPE html>
    <html lang="en">
    <head>
     <meta charset="UTF-8">
     <title><%= htmlWebpackPlugin.options.title %></title>
    </head>
    <body>
     <img src="src/assets/songzhixiao.jpeg" alt="">
     <div id="app"></div>
     <!-- 我是一行注释 -->
    </body>
    </html>
    View Code

    app.js

    import './css/common.css';
    import Layer from './components/layer/layer.js';
    
    
    const App = function(){var dom = document.getElementById('app');var lay = new Layer();
     dom.innerHTML=lay.tpl;
    }new App();
    View Code

    layer.js

    import './layer.less'import tpl from './layer.html'function layer(){return {
     name:'layer',
     tpl: tpl
     }
    }
    
    export default layer;
    View Code

    下载本文
    显示全文
    专题