• webpack入门


    1.入门

    webpack网站:https://doc.webpack-china.org/ 

    npm install webpack -g

    但是官方不推荐,这会将项目中的webpack锁定到指定版本,并且在使用不同webpack版本的项目中,可能会导致构建项目失效。

    npm init -y

    npm install webpack --save-dev

    webpack -v //查看版本

    在终端中的语法:

    webpack {entry file} {destination for bundled file}

    e.g. webpack src/entry.js dist/bundle.js

    2.webpack.config.js

    //引用Node中的path模块

    const path = require('path');

    module.exports={
    //入口文件配置
    entry:{
    entry:'./src/entry.js'
    },
    //出口文件配置
    output:{
    path:path.resolve(__dirname,'dist'),
    filename:'bundle.js'
    },
    //模块,例如解读CSS,图片如何转换,压
    module:{},
    //插件,用于生产模板和各项功能
    plugins:[],
    //配置webpack开发服务功能
    devServer:{}
    }

     这个代码写完后,可以在终端中直接输入webpack就会进行打包。

    多入口文件:

    3.设置webpack-dev-server

    npm install webpack-dev-server --save-dev

    /webpack.config.js:

    devServer:{

    contentBase:path.resolve(__dirname,'dist'),

    host:'localhost',

    compress:true,

    port:1717

    }

    在终端中输入 webpack-dev-server 。也可以在package.json中'scripts'写'server':'webpack-dev-server',然后npm run server;

    4.Loaders

    Loaders是webpack的重要功能,通过使用不同的loader,webpack可以对不同文件格式进行特定处理。

    举例:可以把SASS文件写法转换成CSS,而不在使用其他转换工具。

                可以把ES6,ES7代码,转换成大多数浏览器兼容的JS代码。

                可以把React中的JSX转换成Javascript代码

    注意:所有的Loaders都需要在npm中单独安装,并在webpack.config.js中进行配置

    示例

    在src/css文件夹下建立一个index.css

    然后在/src/entry.js中首行加入代码:import css from './css/index..css';

    npm install style-loader --save-dev

    npm install css-loader --save-dev

    引入代码压缩模块,const uglify = require('uglifyjs-webpack-plugin'); 然后在plugins new uglify();

    5.打包HTML文件

    假设src目录中有个index.html 这个HTML文件不应当包含任何script引入标签,因为这个任务应该交给webpack来执行:

    在webpack.config.js中,先引入我们的html-webpack-plugin

    const htmlPlugin = require('html-webpack-plugin');

    引入后用npm进行安装

    npm install html-webpack-plugin -save-dev

    最后在webpack.config.js里对plugins进行插件配置

    new htmlPlugin({

              minify:{ removeAttributeQuotes:true},

              hash:true,

              template:'./src/index.html'

    })

    .. 终端中输入webpack, 在dist文件夹下查看已经生成的文件

    6.CSS中图片的处理

    如果HTML中有<div>里面的background是url图片地址,

    直接用webpack是会报错的,需要使用file-loader和url-loader

    npm install file-loader url-loader --save-dev

    *url-loader已经封装了file-loader的功能(我也不懂为啥要分开装。。反正上面说那就这样吧)

    option中的limit会对图片大小判断,如果是5000b以下则会使用Base64编码(也就是一大串乱码)

    7.CSS分离

    实际开发中可能需要我们单独分离出CSS样式

    直接使用npm install安装就可以。

    npm install --save-dev extract-text-webpack-plugin

    安装后在webpack.config.js中用require引入

    const extractTextPlugin = require('extract-text-webpack-plugin');

    在plugins属性中进行配置

    new extractTextPlugin('/css/index.css')

    然后修改一下原来我们的style-loader和css-loader

    运行webpack进行打包,dist目录下会生成css文件夹

    这样的话图片是不会显示的,有一个比较通用的解决方法是:

    8.HTML中图片打包

    1.如何使用本地环境下的webpack呢?

    答:在package.json的"script"中写一行 "build":"webpack",然后npm run build

    2.如何让打包的图片也能在某个文件夹内输出?

    答:在url-loader的options里写一行outputPath:'images/'(例如limit:5000,outputPath....)

    Webpack官方不推荐你使用img标签,而是希望你完全使用Javascript,

    如果使用了带src属性的img标签,那么打包出来的图片是不会显示的。

    有一款国人的插件 html-withimg-loader

    9.打包和分离LESS,SASS

    1.怎么让webpack-dev-server自动在新的标签页弹出

    答:在package.json的“scripts”中 "server":"webpack-dev-server --open" 加上--open这个参数

    LESS:

    npm install less --save-dev

    npm install less-loader --save-dev

     
    对webpack.config.js进行配置
    {
    test:/\.less$/,
    use:[{
    loader:"style-loader"
    },{
    loader:"css-loader"
    },{
    loader:"less-loader"
    }]
    }
     
    在src/css下建立less文件进行编写,在entry.js中import less from './css/xxx.less'
    进行webpack打包
     
    设置分离:
    分离后打开dist/css/index.css就能发现已经转换好了。
     
    SASS:
    npm install --save-dev node-sass sass-loader
    npm install --save-dev sass-loader
     
     
    {
    test:/\.scss$/,
    use:[{
    loader:"style-loader"
    },{
    loader:"css-loader"
    },{
    loader:"sass-loader"
    }]
    }
     
    分离代码:
    {
    test:/\.scss/,
    use:extractTextPlugin.extract({
    use:[{
    loader:"css-loader"
    },{
    loader:"sass-loader"
    }],
    fallback:"style-loader"
    })
    }
     
     
     
    10.POSTCSS的使用

    浏览器的内核:

    1.IE Trident
    2.Safari Webkit
    3.Chrome Blink
    4.Firefox Gecko
    5.Opera Presto

    postcss-loader作用是给css3属性加一下浏览器兼容的前缀

    npm install --save-dev(-D) postcss-loader autoprefixer

    在webpack.config.js同级目录下新建postcss.config.js 

    module.exports={
    plugins:[
    require('autoprefixer'),
    ]
    }
     
     
     
    11.PurifyCSS的使用
     
    npm i -D purifycss-webpack purify-css
    (npm install --save-dev purifycss-webpack)
    (npm install --save-dev purify-css) 
    (必须要安装这两个,因为前面的依赖后面的)
     
    const PurifyCSSPlugin = require("purifycss-webpack");
    const glob = require('glob');
     
    new PurifyCSSPlugin({
    paths:glob.sync(path.join(__dirname,'src/*.html'))
    })
     
    进行webpack打包,如果css中写了多余代码而没用到,那么在dist生成的css中则不会有这段冗余的代码
     
     
    12.babel的使用
     
    npm install --save-dev babel-core babel-loader babel-preset-es2015 babel-preset-react
     
    {
    test:/\.(jsx|js)$/,
    use:{
    loader:"babel-loader",
    options:{
    presets:["es2015","react"]
    }
    },
    exclude:/node_modules/
    }
     
    npm run build
     
    因为后期babel配置项可能会比较多,不建议直接写在webpack.config.js的options中
     
    建议新建一个.babelrc进行配置
     
    babelrc里传入一个对象:
     
    (这里写错了,应该是presets,懒得截图了)然后npm run build,也打包成功了。
     
     
    *目前官方推荐的最新的转换器是babel-preset-env,可以转换es7,es8...
     
    npm install --save-dev babel-preset-env
     
    然后修改.babelrc
    然后用webpack打包,也成功了。
     
     12.DEV-TOOLS
     
    source-map 独立 map 行 列(第五行第25个字符错误)
    cheap-module-source-map 独立 行 不包括列(第五行有错误)
    都生成独立文件
     
    例如
     
    用webpack打包,在dist目录下会有entry.js.map这个独立的文件。
     
    eval-source-map 可能会有性能和安全的隐含(在开发阶段用,不要在生产上线阶段用) 行 列
    cheap-module-eval-source-map  行 不包括列
     
     
     13.依赖及生产、开发环境
     
    npm install --save-dev jQuery 开发环境
    npm install --save jQuery 生产环境
     
    npm install --production 只安装package.json生产环境中的依赖包
     
    生产环境的及开发环境的配置:
    package.json 注意这个语法, set type=xxx&webpack 
     
    webpack.config.js 
     
     
     14.webpack模块化开发
     
    例如在src下新建一个alert.js:
    function a(){
    alert('哈!')}
     
    module.exports = a;
     
    在entry.js中引入import ss from './alert.js';
    ss();
     
    npm run dev...
    npm run server...
     
     
    在目录下建立一个空文件夹webpack_config,
    可以将webpack模块化配置写在这里。
     
    在里面新建一个entry_webpack.js
    const entry = {};
    entry.path = {
         entry: './src/entry.js'
    }
     
    module.exports = entry;
     
    在webpack.config.js中:
    const entry = require('./webpack_config/entry_webpack.js');
     
    然后进行配置:
     
     

     14.打包第三方类库
     
    npm install --save jquery
    在entry.js中,import $ from 'jquery',写一些jquery代码。
    打包后就发现可以运行Jq代码了。
     
    还有一种方法引入:
    在webpack.config.js中:
    const webpack = require('webpack');
    使用webpack.ProvidePlugin 
     
     
     15.webpack --watch配置项(热打包)
     
     
    webpack --watch
     
     
    版权banner插件的使用:
    首先要const webpack = require('webpack');
     
    效果:
     
    15.webpack 优化
     
    前面学了两种引用Vue和jquery的方法,
     
    第一种是在entry.js中import,然后使用。
     
    第二种是在plugins中 
    new webpack.ProvidePlugin({
    $:"jquery"
    }),
     
    如果entry.js中没用到Jquery语法的代码的话第一种方法打包后仍然占据空间。
    第二章方法如果把这段注释掉就不占据空间了。
    这里学习一种抽离插件的方法。
     
    抽离插件,入口处写法:
     

     使用webpack.optimize.CommonsChunkPlugin,

    运行webpack命令

    16.集中拷贝静态资源

    npm install --save-dev copy-webpack-plugin

    const copywebpackPlugin = require('copy-webpack-plugin');
    配置:
     
     

    热更新:

    new webpack.HotModuleReplacementPlugin()

  • 相关阅读:
    基本类型和包装类对象使用 == 和 equals进行比较的结果?
    ==和equals的区别是什么?
    JDK和JRE有什么区别?
    Java自学指南三、入门视频优先
    Java自学指南二、后端开发全景图与快速入门
    Java自学指南一、找一个开始并能坚持下去的理由
    什么是&#160;happens-before 原则?
    什么是 Java 内存模型?
    Java 中有哪些无锁技术来解决并发问题?如何使用?
    什么是活锁和饥饿?
  • 原文地址:https://www.cnblogs.com/eret9616/p/7999536.html
Copyright © 2020-2023  润新知