zoukankan      html  css  js  c++  java
  • 从无到有构建vue实战项目(四)

    六、webpack的安装和配置

    1. 为了快速构建vue项目,webpack是一个必不可少的工具,我们先来安装它,附上官网地址:https://www.webpackjs.com/

      要安装最新版本或特定版本,请运行以下命令之一:

      npm install --save-dev webpack
      npm install --save-dev webpack@<version>
      

      如果你使用 webpack 4+ 版本,你还需要安装 CLI:

      npm install --save-dev webpack-cli
      

      以下的 NPM 安装方式,将使 webpack 在全局环境下可用:

      npm install --global webpack
      

      在这里,我推荐使用全局安装,这样可以避免后面使用过程中让你意想不到的各种个问题。

    2. 接下来我们对webpack进行简单的配置:

      我们先理解四个核心概念

      • 入口(entry)
      • 输出(output)
      • loader
      • 插件(plugins)
      • 模式
      入口(entry)

      入口起点(entry point)指示 webpack 应该使用哪个模块,来作为构建其内部依赖图的开始。进入入口起点后,webpack 会找出有哪些模块和库是入口起点(直接和间接)依赖的。

      每个依赖项随即被处理,最后输出到称之为 bundles 的文件中,我们将在下一章节详细讨论这个过程。

      可以通过在 webpack 配置中配置 entry 属性,来指定一个入口起点(或多个入口起点)。默认值为 ./src

      看一个 entry 配置的最简单例子:

      webpack.config.js

      module.exports = {
        entry: './path/to/my/entry/file.js'
      };
      
      出口(output)

      output 属性告诉 webpack 在哪里输出它所创建的 bundles,以及如何命名这些文件,默认值为 ./dist。基本上,整个应用程序结构,都会被编译到你指定的输出路径的文件夹中。你可以通过在配置中指定一个 output 字段,来配置这些处理过程:

      webpack.config.js

      const path = require('path');
      
      module.exports = {
        entry: './path/to/my/entry/file.js',
        output: {
          path: path.resolve(__dirname, 'dist'),
          filename: 'my-first-webpack.bundle.js'
        }
      };
      

      我们通过 output.filenameoutput.path 属性,来告诉 webpack bundle 的名称,以及我们想要 bundle 生成(emit)到哪里。可能你想要了解在代码最上面导入的 path 模块是什么,它是一个 Node.js 核心模块,用于操作文件路径。

      loader

      loader 让 webpack 能够去处理那些非 JavaScript 文件(webpack 自身只理解 JavaScript)。loader 可以将所有类型的文件转换为 webpack 能够处理的有效模块,然后你就可以利用 webpack 的打包能力,对它们进行处理。

      本质上,webpack loader 将所有类型的文件,转换为应用程序的依赖图(和最终的 bundle)可以直接引用的模块。

      在 webpack 的配置中 loader 有两个目标:

      1. test 属性,用于标识出应该被对应的 loader 进行转换的某个或某些文件。
      2. use 属性,表示进行转换时,应该使用哪个 loader。

      webpack.config.js

      const path = require('path');
      
      const config = {
        output: {
          filename: 'my-first-webpack.bundle.js'
        },
        module: {
          rules: [
            { test: /.txt$/, use: 'raw-loader' }
          ]
        }
      };
      
      module.exports = config;
      

      以上配置中,对一个单独的 module 对象定义了 rules 属性,里面包含两个必须属性:testuse。这告诉 webpack 编译器(compiler) 如下信息:

      “嘿,webpack 编译器,当你碰到「在 require()/import 语句中被解析为 '.txt' 的路径」时,在你对它打包之前,先使用 raw-loader 转换一下。”

      插件(plugins)

      loader 被用于转换某些类型的模块,而插件则可以用于执行范围更广的任务。插件的范围包括,从打包优化和压缩,一直到重新定义环境中的变量。插件接口功能极其强大,可以用来处理各种各样的任务。

      想要使用一个插件,你只需要 require() 它,然后把它添加到 plugins 数组中。多数插件可以通过选项(option)自定义。你也可以在一个配置文件中因为不同目的而多次使用同一个插件,这时需要通过使用 new 操作符来创建它的一个实例。

      webpack.config.js

      const HtmlWebpackPlugin = require('html-webpack-plugin'); // 通过 npm 安装
      const webpack = require('webpack'); // 用于访问内置插件
      
      const config = {
        module: {
          rules: [
            { test: /.txt$/, use: 'raw-loader' }
          ]
        },
        plugins: [
          new HtmlWebpackPlugin({template: './src/index.html'})
        ]
      };
      
      module.exports = config;
      
      模式

      通过选择 developmentproduction 之中的一个,来设置 mode 参数,你可以启用相应模式下的 webpack 内置的优化

      module.exports = {
        mode: 'production'
      };
      

    七、本项目中的webpack.config.js的基本配置和出错情况

    1. 先来看我的基础配置(最终版):
    var path = require('path')  // 引入操作路径模块
    const VueLoaderPlugin = require('vue-loader/lib/plugin') //引入vue-loader
    module.exports = {
        mode: 'development',
        // 输入文件
        entry: './src/main.js',
        output: {
            // 输出目录
            path: path.resolve(__dirname, 'dist'),
            // 静态目录,从这里取文件
            publicPath: '/dist/',
            // 文件名
            filename: 'index.js'
        },
        module: {
            rules: [
                //解析vue后缀文件
                {
                    test: /.vue$/, 
                    loader: 'vue-loader'
                },
                //用巴babel解析js文件 排除模块安装目录的文件
                {
                    test: /.js$/, 
                    loader: 'babel-loader',
                    query: {
                        presets: ['es2015']
                    },
                    include: '/src',
                    exclude:'/node_modules/'
                },
                {
                    test: /.css$/,
                    use: [ 'style-loader', 'css-loader' ]
                  },
                {
     
                    test: /.scss$/,
                    loader: 'style-loader!css-loader!sass-loader' 
                    },
                    {
                        test: /.(eot|svg|ttf|woff|woff2)(?S*)?$/,
                        loader: 'file-loader'
                }
            ]
        },
        plugins: [
            // 请确保引入这个插件!
            new VueLoaderPlugin()
          ]
    }
    

    然后在以上配置过程中,出现了一系列的问题:

    出现这个错误是因为每个 vue 包的新版本发布时,一个相应版本的 vue-template-compiler 也会随之发布。编译器的版本必须和基本的 vue 包保持同步,这样 vue-loader 就会生成兼容运行时的代码。这意味着你每次升级项目中的 vue 包时,也应该匹配升级 vue-template-compiler。

    你应该将 vue-loadervue-template-compiler 一起安装——除非你是使用自行 fork 版本的 Vue 模板编译器的高阶用户:

    npm install -D vue-loader vue-template-compiler
    

    然后在webpack.config.js中分别写入:

    const VueLoaderPlugin = require('vue-loader/lib/plugin')
    
    module: {
        ...
      plugins: [
        // 请确保引入这个插件!
        new VueLoaderPlugin()
      ]
    }
    


    很明显,该错误是由element-ui引起的,解决这个问题我们只需要插入这样一段语句:

    {
                        test: /.(eot|svg|ttf|woff|woff2)(?S*)?$/,
                        loader: 'file-loader'
                }
    
  • 相关阅读:
    Linux文件属性
    [Oracle] Listener的动态注册
    jQuery easyUI Pagination控件自定义div分页(不用datagrid)
    桂林电子科技大学出校流量控制器Android版1.0.0
    php使用check box
    Python windows ping
    Python selenium chrome 环境配置
    Linux wget auto login and backup database
    PyQt4 ShowHMDB show sqlite3 with QTableWidget summary
    PyQt4 py2exe 打包 HardwareManager
  • 原文地址:https://www.cnblogs.com/ktddcn/p/11178078.html
Copyright © 2011-2022 走看看