• 历经一天半,菜菜本菜终于配置好webpack哈哈哈哈哈哈哈哈哈哈


    前言

    1.webpack的版本一直在变,它的语法也在变,最好的就是比对官方文档

    https://webpack.js.org    官方文档这才是永远的神,遇到错误去官方文档查看找答案真的很有效

    2.配置成功,不代表懂原理,原理很重要,对于后面的配置来说,懂了原理事半功倍。

    3.对于版本一直变化,语法也变化的软件来说,一定要找最近的教程来看,否则错误百出

    第1步 安装nodejs+webpack

    注意:CMD要以管理员身份打开,否则在安装webpack那一步一直报错

    默认 : C:WindowsSystem32 --cmd.exe

    什么是Node.js?

    简单的说 Node.js 就是运行在服务端的 JavaScript。
    Node.js是一个基于 Chrome V8 引擎的 JavaScript 运行环境;
    Node.js使用一个事件驱动、非阻塞式 I/O 的模型,使其轻量且高效;
    Node.js的软件包生态系统npm是全球最大的开源库生态系统。

    安装教程

    本机环境:Windows 10  64bit操作系统

    1.下载安装包

    Node.js 官方网站下载:https://nodejs.org/en/download/

     下载完成,安装包如下:

     

    2.安装

    双击打开安装,下一步下一步即可:

     

      安装成功,测试安装是否成功,运行CMD,分别输入node -v 和 npm -v 分别查看node和npm的版本号,如下图所示:

     

    安装完成后系统目录如图所示(其中,npm随安装程序自动安装,作用就是对Node.js依赖的包进行管理):

     

    3.配置npm在安装全局模块时的路径和缓存cache的路径

    因为在执行例如npm install webpack -g等命令全局安装的时候,默认会将模块安装在C:Users用户名AppDataRoaming路径下的npm和npm_cache中,不方便管理且占用C盘空间,

    所以这里配置自定义的全局模块安装目录,在node.js安装目录下新建两个文件夹 node_global和node_cache,如图所示:

     

     然后在cmd命令下执行如下两个命令,配置路径:

    npm config set prefix "D:Install
    odejs
    ode_global"
    npm config set cache "D:Install
    odejs
    ode_cache"

    执行命令,如下图所示:

    (输入指令后,命令行闪一下,不会有任何提示)

     执行完后,配置环境变量,分别新建用户变量PATH和系统变量NODE_PATH,如下:

    "此电脑"->“属性”->"高级系统设置"->“环境变量” -> “系统变量”:新建一个变量名为 “NODE_PATH”, 值为“D:Install odejsnode_global”,如下图:

    这是最重要的一点;在安装webpack后出现'webpack' 不是内部或外部命令的问题 就是因为路径不对

    PATH和NODE_PATH全部设置为:DInstall odejs ode_global。

    看到网上的设置方法为  :NODE_PATH属性指向D:Install odejs ode_global ode_modules,这样设置并不对,就会导致报不是内部命令

    “环境变量” -> “用户变量”:编辑用户变量里的Path,将相应npm的路径(“C:Users用户名AppDataRoaming pm”)改为:“D:Install odejs ode_global”,如下:

     配置完成。 

    4.安装webpack及webpack-cli

      在cmd命令下执行 npm i -g webpack webpack-cli 安装webpack如下图所示:

     前端包管理工具npm, bower and grunt

     

    也可以切换到本地目录在安装一遍,当然全局安装就可以了,

     可以忽略本地安装:因为我在D:vue-exeluees6module 下练习项目,所以定为本地位置,命令:npm i webpack webpack-cli

    安装成功,自动生成文件夹如下所示:

     

     

    在cmd命令下执行 webpack -v 查看webpack版本,如提示:

     注意:安装webpack 过程中报错是因为没在管理员下安装

    ----------------------------------------------------------------------

    wepack安装命令

    webpack和webpack-cli这两个都需要装上

    这两个是互相配合的,一开始就是两个都需要装

    -g  全局安装, i 是install 的简写

    npm i -g webpack webpack-cli       全局安装(可要任何位置安装)

    npm i webpack webpack-cli      本地安装(在本地目录下)

    两个本地,两个全局,正常使用webpack时,这四个库都要装,当然全局的装一遍就行了

    web

     --save 写入到 dependencies 对象   -S就是--save

     --save-dev 写入到 devDependencies 对象

    ----------------------------------------------------------------------

    第2步 配置mode依赖

    Provide the mode option in the config:

    module.exports = {
      mode: 'development',
    };

    or pass it as a CLI argument:

    webpack --mode=development

    第3步  测试你的webpack打包功能

    1. 首先在桌面新建一个 webpacktest 文件夹
    2. 打开命令行工具,进入 webpacktest 文件夹中
    cd Desktop
    cd webpacktest
    
    1. 安装 webpack
    //先在全局安装
    cnpm install webpack -g
    //再在项目中安装
    cnpm install webpack --save-dev
    
    1. 在项目中新建一个 webpack.config.js 文件
      编辑 webpack.config.js 文件
    var webpack = require('webpack');
    console.log(webpack);//测试 webpack 是否安装成功
    
    1. 在命令行中运行,查看输出是否成功
      node webpack.config.js

    输出如下图所示的一个对象 即表示成功了


     
    image.png
    1. 接下来就是引入比较核心的东西
    var webpack = require('webpack');
    //最核心的模块,所有的东西都要在这里面进行
    module.exports = {
    
    }
    
    1. 接下来就要建网站了,一般是通过这样的形式:在项目中新建 src 和 build 文件夹
      文件是在 src 文件夹中编辑然后 build 到 build 文件夹中 上线上的是 build 文件夹
      文件结构如下

    src -> stylesheets -> index.css
    src -> scripts -> app.js
    src -> scripts -> index.js
    src -> index.html
    build -> stylesheets
    build -> scripts

    1. 开始编辑文件
      index.js
    var s = function(data) {
        //console.warn 向web 控制台输出一条警告信息
        console.warn(data);
    }
    //切记这里要按照模块的规范一样将要导出的东西导出,这里我们将函数 s 导出去了
    module.exports.fn = s;
    

    app.js

    var index = require('./index.js');
    index.fn('init index');
    

    index.html

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>第一个webpacktest</title>
    </head>
    <body>
        Hello Webpack
    </body>
    </html>
    

    index.css

    body{
        background: black;
        color: green;
    }
    

    webpack.config.js

    var webpack = require('webpack');
    // console.log(webpack);//测试 webpack 是否安装成功   
    
    //最核心的模块,所有的东西都要在这里面进行
    module.exports = {
        //配置入口资源
        //它的值可以是对象也可以是单一的一个
        entry:__dirname + 'src/scripts/app.js',
        //配置编译后的资源
        //将编译后的资源放到哪去
        output:{
            path:__dirname + 'build/scripts',
            //hash 表示的是:平常的 index.js 编译后就变成了 index.assxx.js
            filename:'[name]-[hash].js'
        }
    }
    
    1. 在命令行中 webpacktest 目录下运行程序
    webpack
    

    显示如下图所示代表执行成功了

     
    image.png
    1. 到项目中的 build -> scripts 文件夹中查看会发现多了一个编译后的 .js 文件
    /******/ (function(modules) { // webpackBootstrap
    /******/    // The module cache
    /******/    var installedModules = {};
    /******/
    /******/    // The require function
    /******/    function __webpack_require__(moduleId) {
    /******/
    /******/        // Check if module is in cache
    /******/        if(installedModules[moduleId]) {
    /******/            return installedModules[moduleId].exports;
    /******/        }
    /******/        // Create a new module (and put it into the cache)
    /******/        var module = installedModules[moduleId] = {
    /******/            i: moduleId,
    /******/            l: false,
    /******/            exports: {}
    /******/        };
    /******/
    /******/        // Execute the module function
    /******/        modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
    /******/
    /******/        // Flag the module as loaded
    /******/        module.l = true;
    /******/
    /******/        // Return the exports of the module
    /******/        return module.exports;
    /******/    }
    /******/
    /******/
    /******/    // expose the modules object (__webpack_modules__)
    /******/    __webpack_require__.m = modules;
    /******/
    /******/    // expose the module cache
    /******/    __webpack_require__.c = installedModules;
    /******/
    /******/    // define getter function for harmony exports
    /******/    __webpack_require__.d = function(exports, name, getter) {
    /******/        if(!__webpack_require__.o(exports, name)) {
    /******/            Object.defineProperty(exports, name, {
    /******/                configurable: false,
    /******/                enumerable: true,
    /******/                get: getter
    /******/            });
    /******/        }
    /******/    };
    /******/
    /******/    // getDefaultExport function for compatibility with non-harmony modules
    /******/    __webpack_require__.n = function(module) {
    /******/        var getter = module && module.__esModule ?
    /******/            function getDefault() { return module['default']; } :
    /******/            function getModuleExports() { return module; };
    /******/        __webpack_require__.d(getter, 'a', getter);
    /******/        return getter;
    /******/    };
    /******/
    /******/    // Object.prototype.hasOwnProperty.call
    /******/    __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
    /******/
    /******/    // __webpack_public_path__
    /******/    __webpack_require__.p = "";
    /******/
    /******/    // Load entry module and return exports
    /******/    return __webpack_require__(__webpack_require__.s = 0);
    /******/ })
    /************************************************************************/
    /******/ ([
    /* 0 */
    /***/ (function(module, exports, __webpack_require__) {
    
    var index = __webpack_require__(1);
    index.fn('init index');
    
    /***/ }),
    /* 1 */
    /***/ (function(module, exports) {
    
    var s = function(data) {
        //console.warn 向web 控制台输出一条警告信息
        console.warn(data);
    }
    //切记这里要按照模块的规范一样将要导出的东西导出,这里我们将函数 s 导出去了
    module.exports.fn = s;
    
    /***/ })
    /******/ ]);
    
    1. 这个时候需要在 html 中将这个编译过后的 .js 文件引过来,需要安装一个包 html-webpack-plugin

    参考链接:https://www.npmjs.com/package/html-webpack-plugin

    npm install html-webpack-plugin --save-dev
    
    1. 配置插件 plugins
      编辑 webpack.config.js 文件
    var webpack = require('webpack');
    var HtmlWebpackPlugin = require('html-webpack-plugin');
    // console.log(webpack);//测试 webpack 是否安装成功   
    
    //最核心的模块,所有的东西都要在这里面进行
    module.exports = {
        //配置入口资源
        //它的值可以是对象也可以是单一的一个
        entry: __dirname + '/src/scripts/app.js',
        //配置编译后的资源
        //将编译后的资源放到哪去
        output: {
            path: __dirname + '/build',
            //hash 表示的是:平常的 index.js 编译后就变成了 index.assxx.js
            filename: 'scripts/[name]-[hash].js'
        },
        plugins: [
            new HtmlWebpackPlugin({ // Also generate a test.html 
                filename: 'index.html',
                template: __dirname + '/src/index.html'
            })
        ]
    }
    
    1. 命令行中执行
    webpack
    

    结果如下图所示,证明成功了


     
    image.png
    1. 此时去查看 build 文件夹,会发现多了一个 index.html 文件
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>第一个webpacktest</title>
    </head>
    <body>
        Hello Webpack
    <script type="text/javascript" src="scripts/main-dc8843a6a69bfa4cd69e.js"></script></body>
    </html>
    

    在浏览器中打开 index.html 页面 会如下图显示

     
    image.png
    1. 配置别名 resolve
      编辑 webpack.config.js 文件
    var webpack = require('webpack');
    var HtmlWebpackPlugin = require('html-webpack-plugin');
    // console.log(webpack);//测试 webpack 是否安装成功   
    
    //最核心的模块,所有的东西都要在这里面进行
    module.exports = {
        //配置入口资源
        //它的值可以是对象也可以是单一的一个
        entry: __dirname + '/src/scripts/app.js',
        //配置编译后的资源
        //将编译后的资源放到哪去
        output: {
            path: __dirname + '/build',
            //hash 表示的是:平常的 index.js 编译后就变成了 index.assxx.js
            filename: 'scripts/[name]-[hash].js'
        },
        plugins: [
            new HtmlWebpackPlugin({ // Also generate a test.html 
                filename: 'index.html',
                template: __dirname + '/src/index.html'
            })
        ],
        resolve:{
            extensions:['.js','.css']
        }
    }
    

    然后修改 app.js 文件第一行

    var index = require('./index');
    

    将 build ->scripts 中的两个编译后的 .js 文件删掉

    再在命令行中执行程序

    webpack
    

    如下图所示即表示成功了

     
    image.png
    1. 接下来开始引入 css 文件
      编辑 app.js 文件
    var index = require('./index');
    require('../stylesheets/index');
    index.fn('init index');
    

    此时运行程序

    webpack
    

    会报如下所示的错误

     
    image.png

    这个报错是因为对 css 文件编译失败了需要另一个 loader

    1. 资源处理 module 模块
      css 处理后实际上会被打包到 js 里

    编辑 webpack.config.js 文件

    var webpack = require('webpack');
    var HtmlWebpackPlugin = require('html-webpack-plugin');
    // console.log(webpack);//测试 webpack 是否安装成功   
    
    //最核心的模块,所有的东西都要在这里面进行
    module.exports = {
        mode: 'development',
        //配置入口资源
        //它的值可以是对象也可以是单一的一个
        entry: __dirname + '/src/scripts/app.js',
        //配置编译后的资源
        //将编译后的资源放到哪去
        output: {
            path: __dirname + '/build',
            //hash 表示的是:平常的 index.js 编译后就变成了 index.assxx.js
            filename: 'scripts/[name]-[hash].js'
        },
        //配置插件
        plugins: [
            new HtmlWebpackPlugin({ // Also generate a test.html 
                filename: 'index.html',
                template: __dirname + '/src/index.html'
            })
        ],
        module: {
        rules: [
          { test: /.css$/, use: 'css-loader' },
          { test: /.ts$/, use: 'style-loader' },
            ],
         },
        //配置扩展名
        resolve: {
            extensions: ['.js', '.css']
        }
    }
    此时运行程序
    webpack
    

    会报出如下图所示的错误

     
    image.png

    这个错是因为我们并没有安装所使用的 loader

    接下来进行安装两个 loader

    cnpm install css-loader --save
    cnpm install style-loader --save
    

    装完之后在执行

    webpack
    

    如下图所示表示成功了

     
    image.png

    此时在浏览器中打开 build -> index.html 文件,css js 什么的就都有了

     
    image.png
    1. 总结:
      loader 的用法
     
    image.png
    1. 用 require 的方式


       
      image.png
    2. 在 webpack.config.js 文件中配置


       
      image.png
    3. 通过命令行的方式


       
      image.png

      常见的 loader


       
      image.png
    1. webpack 使用优化
     
    image.png

     
    image.png

     
    image.png

     
    image.png

     
    image.png

     
    image.png

     
    image.png

    webpack 主要的就是 webpack.config.js 中五个模块的配置。

    参考链接:http://webpack.github.io/ webpack 官网

    webpack 2


     
    image.png


  • 相关阅读:
    shiro登录验证原理
    注解 java.lang.annotation.Inherited 介绍
    Spring Boot默认Initializer(1)——ConfigurationWarningsApplicationContextInitializer
    Java的static类
    Spring Boot中的initializers的作用分析
    2. Spring Boot项目启动原理初探
    1.Spring Boot入门及其jar包依赖模型分析
    关于正则式中的 |
    iOS :ViewDidAppear
    Xcode
  • 原文地址:https://www.cnblogs.com/xiaoming521/p/14752167.html
Copyright © 2020-2023  润新知