webpack4.0从零开始单页(多页)应用配置(二)

栏目: JavaScript · 发布时间: 5年前

内容简介:通过webpack运行起的项目如果不对图片资源做处理是不会加载到文件的。例:我们在src目录下添加一个

webpack4.0从零开始单页(多页)应用配置 (一)

加载图片

通过webpack运行起的项目如果不对图片资源做处理是不会加载到文件的。

例:我们在src目录下添加一个 image 目录并且放入一张图片在里面: webpack4.0从零开始单页(多页)应用配置(二)

且在style.css文件加入如下代码:

html, body{
    height: 100%;
    background-color: red;
    background-image: url('./image/yangmi.jpg')
}

执行 npm run dev 发现并不会如期那样,界面上呈现图片。且报如下错误

webpack4.0从零开始单页(多页)应用配置(二)

提示已经很智能了,需要安装loader解析此类文件。

安装: npm install --save-dev file-loader url-loader

  • 之前讲过处理资源一般是在 moude 配置,所以在 moude 下的规则配置如果就能加上图片了
{
    test: /\.jpg|\.png|\.gif|\.jpeg|\.svg/,
    use: {
        loader: 'url-loader',
        options: {
            limit: 8192 //将小于8kb的图片 转为base64, 这样就会减少发送http的请求提高性能
        }
    }
}

再次执行, npm run dev ;

webpack4.0从零开始单页(多页)应用配置(二)

加载字体

项目中可能会加入各种字体库,现在除了 svg ,我们用得比较多的就是 iconfont 了所以这里我们拿 iconfont 举例:我们在 iconfont 图标库里导出图标,并将放在 src 目录下命名为 font :

webpack4.0从零开始单页(多页)应用配置(二)

webpack.config.js 添加配置如下:

{
  test: /\.(woff|woff2|eot|ttf|otf)$/,
  use: {
    loader:'url-loader'
  }
}

并在 main.js 文件引入 iconfont.css 并添加一个名为 iconauth 的名字并执行 npm run dev 如下:

webpack4.0从零开始单页(多页)应用配置(二)

webpack4.0从零开始单页(多页)应用配置(二)

引用vue

安装: npm install vue --save npm install --save-dev vue-loader

webpack.config.js

{
    test: /\.vue$/,
    use: {
      loader: 'vue-loader'
    }
}

main.js

import Vue from 'vue';
import App from './app.vue'

new Vue({
  el: '#app',
  render: h => h(App)
});

执行 npm run dev 编译报错:

<font color="#b20000"> vue-template-compiler must be installed as a peer dependency, or a compatible compiler implementation must be passed via options. </font>

所以需要再安装:

npm install --save-dev vue-template-compiler

关于vue-template-compiler 的定义 ,其github描述如下 :

This package can be used to pre-compile Vue 2.0 templates into render functions to avoid runtime-compilation overhead and CSP restrictions. In most cases you should be using it with vue-loader, you will only need it separately if you are writing build tools with very specific needs.

翻译如下 :

此包可用于将Vue 2.0模板预编译为呈现函数,以避免运行时编译开销和CSP限制。 在大多数情况下,您应该将它与vue-loader一起使用,如果您正在编写具有特定需求的构建工具,则只需要单独使用它;

所以不知道的人很容易将vue-template-compiler遗忘,不过跟着处理一个一个报错就行了,,,哈哈~

再次执行 npm run dev :

what?

webpack4.0从零开始单页(多页)应用配置(二)

日常每天问自己,我哪儿做错了,我知道了我一定改 ╥﹏╥!

在github上看到了别人的回答: webpack4.0从零开始单页(多页)应用配置(二) ,可能是因为v15还不太稳定的原因,所以将其回到vue-loader@^14.2.2版本就行了,

npm install --save-dev vue-loader@^14.2.2

编译ES6代码兼容浏览器

都知道解决ES6都是通过babel进行编译的,所以安装babel相关插件:

`npm install babel-core babel-loader babel-preset-env babel-preset-stage-0 babel-preset-stage-1 babel-preset-stage-2 babel-preset-stage-3

--save-dev`

在项目根目录下创建 .babelrc

{
  "presets": [
    "env",
    "stage-0",
    "stage-1",
    "stage-2",
    "stage-3"
  ],
  "plugins": [
    "transform-runtime"
  ]
}

新增 webpack.config.js 配置

{
    test: /\.js$/,
    exclude: /node_modules/,
    use: {
      loader: "babel-loader"
    }
}

安装:我们在项目开发中并不是所有的语法都会用到,所以添加babel-plugin-transform-runtime将用到的会自动打包到项目中

npm i babel-plugin-transform-runtime --save-dev

.babelrc配置

{
  "presets": [
    "env",
    "stage-0",
    "stage-1",
    "stage-2",
    "stage-3"
  ],
  "plugins": [
    [
      "transform-runtime",
      {
        "polyfill": false
      }
    ]
  ]
}

区分开发环境和生产环境

将开发环境的配置和生产环境的配置放在不同目录更加有利于阅读,且不用在同一目录 下写很多判断去区分,所以在根目录下新建 webpack.dev.config.jswebpack.prod.js ;

修改package.json

{
    script: {
        "dev": "webpack-dev-server --development --config webpack.dev.js",
        "build": "webpack --config webpack.prod.js --production"
    }
}

引入 webpack-merge

npm install --save-dev webpack-merge

webpack.dev.js添加入代码

const Merge = require('webpack-merge');
const baseWebpackConfig = require('./webpack.config');
const path = require('path');

console.log(process.env.NODE_ENV);

module.exports = Merge(baseWebpackConfig, {
  devServer: {
    contentBase: path.join(__dirname, 'dist'),// 服务器资源的根目录,不写的话,默认为bundle.js
    hot: true, //启用热加载
    host: 'localhost',
    port: 8800,//端口号
    compress: true, // 服务器资源采用gzip压缩
  },//通过node起一个本地服务器,webpack-dev-server完成一些代理,mock数据热加载等功能
  mode: 'development'
});

webpack.prod.js 添加如下代码

const Merge = require('webpack-merge');
const baseWebpackConfig = require('./webpack.config');

module.exports = Merge(baseWebpackConfig, {
  mode: 'production'
});

到这里基本上可以运行于项目了,后期会讲到如果优化一些项,比如提取多次引用问题,自动添加css前缀等!


以上所述就是小编给大家介绍的《webpack4.0从零开始单页(多页)应用配置(二)》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

软件的奥秘

软件的奥秘

[美] V. Anton Spraul / 解福祥 / 人们邮电出版社 / 2017-9-1 / 49

软件已经成为人们日常生活与工作中常见的辅助工具,但是对于软件的工作原理,很多人却不是非常了解。 本书对软件的工作原理进行了解析,让读者对常用软件的工作原理有一个大致的了解。内容涉及数据如何加密、密码如何使用和保护、如何创建计算机图像、如何压缩和存储视频、如何搜索数据、程序如何解决同样的问题而不会引发冲突以及如何找出最佳路径等方面。 本书适合从事软件开发工作的专业技术人员,以及对软件工作......一起来看看 《软件的奥秘》 这本书的介绍吧!

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具