• 第一次使用webpack


    webpack是现代流行的一款前端打包工具。一般来说,一个真实的网页往往不使用纯js编写。比如大型网页,我们一般会选择Typescript, Less等产品化工具型语言,或者使用Angular, React 等前端框架。如果是这样写出来的网页往往不是能直接放到浏览器里执行的。
     
    一般来说,我们会先用lessc命令将网页所有的less文件编译成浏览器识别的css文件。再用tsc命令将网页用到的ts文件编译成浏览器识别的js文件。一步步操作完成。
     
    通常产品化的网页维护成本较大,一般我们将步骤合法化到批处理文件或是其他方式,但这些都不适用于真正竞争力充足的商品。
     
    webpack主要就是针对于这些需求自动化完成网页打包的工具。
     
    1.最基本的功能 -- 识别文件依赖,允许使用require等高级语法。
     
    很多浏览器都还不支持require export等语法。webpack原生就支持这种写法,并且能够分析文件依赖。
    npm init
    npm install webpack
    编写测试代码:
     
    grapecity.js:
     
    module.exports = function showCompapy(){
    console.log('This is Grapecity! We have a new child company');
    var gartner = require('./gartner.js');
    gartner();
    }
     
    gartner.js:
     
    module.exports = function showCompapy(){
    console.log('This is Gartner New Guy!');
    }
     
    入口文件 main.js:
    var gc = require("./grapecity.js");
    gc();
     
     
    编写webpack配置,webpack配置就有点类似早期大型网页开发人员编写的批处理文件。
    module.exports = {
    entry: __dirname + '/source/main.js',
    output: {
    path: __dirname + '/output',
    filename: 'bundle.js'
    },
    devtool: "eval-source-map"
    }
     
     
    最基本的配置包括:
    入口文件:从什么文件开始分析依赖,并不断打包。
    产物:一般是一个js文件。
    调试工具:生成map文件,方便开发人员调试。
    名称
    特点
    source-map
    生成对应的产品源码和webpack源码
    eval-source-map
     
    cheap-module-eval-source-map
    生成对应的产品源码
    cheap-module-source-map
    不生成源码
     
    2.对框架的支持。(非原生支持)
    npm install react react-dom --save
     
    render.js
    import React , { Component } from 'react'
     
    export class Painter extends Component{
    render(){
    return (Painter Component);
    }
    }
     
    main.js
    import React from 'react';
    import { render } from 'react-dom';
    import { Painter } from './render.js';
     
    window.onload = function () {
    render( />, document.getElementById('container'));
    };
     
    直接运行,网页肯定会崩溃。但使用webpack也有错误,因为对框架支持并非是webpack原生支持的功能。
     
    npm install --save-dev
    babel-core babel-loader babel-preset-env babel-preset-react
    安装多个插件
     
    继续扩增webpack.config.js
    module: {
    rules: [
    {
    test: /(\.js|\.jsx)$/,
    use: {
    loader: "babel-loader",
    options: {
    presets: ['env', 'react']
    }
    }
    }
     
    ]
    }
    在rules增加一项对js jsx文件的处理,使用babel-loader进行处理
    presets是Babel的插件,通过
    npm install babel-preset安装得到。插件用来转换成es6语法等
     
    注意设置include可以提高速度。
    可以把路径也换成绝对路径:
    var path = require('path') ;
    path.resolve(__dirname, 'src');
     
    3.对CSS的支持(非原生支持)
    还是得先安装下依赖
     
    npm install --save-dev
    style-loader css-loader
    继续扩增下rules,这次针对css文件进行处理
    {
    test: /\.css$/,
    use: [
    {
    loader: 'style-loader'
    },
    {
    loader: 'css-loader'
    }
    ]
    }
     
     
    postcss-loader 可以增加不同浏览器对css某一属性的支持
     
    4.typescript支持(非原生能支持)
     
    先安装依赖
    npm insatll typescript ts-loaer
     
    typescipt可以编写他自己的config
    tsconfig.json
    {
    "compilerOptions": {
    "module": "commonjs",
    "target": "es5",
    "sourceMap": true
    }
    }
     
     
    再次给rules新增一项,这次主要处理ts
    {
    test: /\.ts$/,
    use: {
    loader: 'ts-loader'
    }
    },
     
    添加测试的ts文件
    export class Student{
    constructor(container:HTMLDivElement){
    if(!container){
    return;
    }
     
    container.innerHTML = '
    Welcome Typescript!
    ';
    }
    }
    入口文件引用
    import { Student } from './test.ts';
     
     
    window.onload = function () {
    new Student(document.getElementById('container_02'));
    };
     
     
    5.原生插件(原生支持,无需安装额外包)
    新增一句
    var webpack = require('webpack');
     
    新增项:
    plugins: [
    new webpack.BannerPlugin('版权所有,翻版必究')
    ]
    这个从插件可以给最终的js文件开头新增一些话。
     
     
    一些比较常用的需要安装的插件
    npm install html-webpack-plugin
     
    使用
    var htmlWebpack = require('html-webpack-plugin');
     
    plugins: [
    new webpack.BannerPlugin('版权所有,翻版必究'),
    new htmlWebpack({
    filename: 'index-version-[hash].html',
    inject: 'head',
    template:'./source/index.html'
    })
    ],
    hash是关键字,每次生成的都不一样。生成的html会放在output的path属性里面
    注意output的filename也可以带路径的,这样html和最终js产物就不冲突了。
    template是模板,有了模板就可以只加js引用了。
     
    6.补充
     
    不一定非的要webpack.config.js
    修改配置名字只需要修改package
     
    webpack --config aa.js
    --progress
    --display-modules
    --colors
    --display-reason
     
    "start": "webpack --config webpack.config.js --display-error-details"
  • 相关阅读:
    江湖盛传“阿里三板斧”,其实这才是全部真相!
    PHP算法之四大基础算法
    PHP实现的毫秒定时器,同时解决进程不重复堆积
    leetcode小题解析
    PHP算法之二分查找
    elastic学习笔记
    php中mysqli 处理查询结果集总结
    PHP中的 Iterator 与 Generator
    Laravel源码解析之反射的使用
    PHP下的异步尝试四:PHP版的Promise
  • 原文地址:https://www.cnblogs.com/chenyingzuo/p/16440522.html
Copyright © 2020-2023  润新知