详解webpack与SPA实践之开发环境搭建

目前,公司前端项目开发技术栈基本改造为使用gulp进行自动化构建,webpack进行项目模块化依赖管理,Vue+ Vuex + Vue-Router作为项目组件化开发框架,为了更深入的理解、使用当前技术栈并与读者分享、交流,计划推出一系列相关学习与实践文章。本篇为开篇,主要讲述如何使用webpack搭建开发环境。

项目初始化

以你喜欢的任意方式,创建项目根目录,如:

mkdir vue-hello

初始化包模块管理文件

进入项目根目录,初始化项目包模块管理文件package.json:

npm init 

命令台会提示你输入一堆信息,如果你想简单一点,可以添加-y参数,跳过输入步骤,生成默认信息:

npm init -y

初始化源码目录

在项目根目录下创建源码目录结构,通常源码目录是src或app,个人喜好是使用src:

webpack简述及使用

虽然在本篇文章我们不会对webpack做太过详细的介绍,但是依然希望能帮助读者对webpack拥有更清晰的了解,webpack是什么?

webpack is a tool to build JavaScript modules in your application

webpack是一个帮助你的应用构建JavaScript模块的工具。

接下来,我们介绍几个知识点帮助理解webpack:模块化,webpack原理及其与grunt和gulp的比较。

模块化

模块化 指解决一个复杂问题时自顶向下逐层把系统划分成若干模块的过程。

模块是一个可组合、分解和更换的单元,将一个系统分解成若干模块,单元;大家遵循一定的规范,各司其职,各自开发不同模块;之后可以较低成本的将模块组合起来,构成一个完整的系统,极大方便了团队成员之间的协助开发,产出效率得到有效提升。

WEBPACK原理

webpack是一个帮助你的应用构建JavaScript模块的工具,其本质只能处理JavaScript,那你会疑惑了,不是说使用webpack,可以很方便的在JavaScript代码中引用图片,CSS等资源嘛?是的,这正是webpack的优势,那怎么实现的呢?这就要涉及到webpack中的一个概念:加载器(loader)。

加载器 是作用于应用资源文件的转换器,它们是一系列JavaScript函数,接受资源文件的内容做参数,然后返回新的资源(以一个JavaScript模块的形式返回)。

所以,对于webpack,我们明确三点:

  1. 模块:webpack中一切资源文件(JavaScript, 样式, 图片资源等)皆视为模块;
  2. 加载器:webpack通过加载器(JavaScript函数)将其他资源处理(构建)成JavaScript模块;
  3. 管理依赖:webpack在编译模块时,就能分析查找该模块内的依赖,可以很好的处理不同模块间的依赖;

WEBPACK对比GRUNT/GULP

grunt

打开grunt官网,你可以看到最醒目的介绍:The JavaScript Task Runner,还有一个关键字automation – 自动化,其定位是一个JavaScript的自动化构建任务处理器,帮助开发者自动化处理项目的构建流程;

gulp

gulp官网的定义是:Automate and enhance your workflow,自动强化项目构建流程,其与grunt的目标一致,都是帮助开发者自动化处理项目的构建流程,不同的是gulp实现方式是基于流的,即以流的方式处理文件,而grunt是以二进制方式处理文件,gulp使用性能是要强于grunt的;

总结

  1. webpack定位是一个模块化管理工具,而grunt/gulp都是自动化任务流程构建工具;
  2. grunt基于二进制处理文件,gulp基于流式处理文件,效率比grunt更高一些;
  3. webpack强大特性,使得其添加诸多插件可以替代grunt/gulp,但是目前的实践项目中,通常webpack结合gulp或grunt使用(各自处理各自专长的任务);

安装

首先安装webpack,npm或yarn都可以,无甚区别:

npm install --save-dev webpack

关于此处的--save和-dev参数做简要说明:

  1. --save是声明将安装依赖添加入package.json文件;
  2. 默认地,使用npm安装包模块依赖时,依赖关系存储在在"dependencies"属性对象内,表示项目依赖;
  3. webpack是作为开发环境依赖的,不是作为源码直接调用,所以添加-dev参数,以声明其是开发环境依赖;

webpack配置介绍

实践项目使用webpack完成自动化构建,本地服务调试与热加载,首先在根目录下创建webpack的配置入口文件webpack.config.js,基本内容结构如下:

  var path = require('path');

  module.exports = {
    context: path.resolve(__dirname, 'src/'),
    entry: {
      app: './scripts/app.js'
    },
    output: {
      filename: '[name].js',
      path: path.resolve(__dirname, 'dist/scripts/')
    },
    module: {
      loaders: []
    },
    resolve: {
      modules:[],
      alias: {},
      extensions: []
    },
    plugins: [],
    devServer: {}
  };

如上,webpack配置文件使用module.exports方式导出配置对象,webpack执行时会默认读取项目根目录下webpack.config.js文件,当然可以手动配置指定一个文件作为配置文件,我们不讨论,可以参考webpack文档,接下来对webpack配置内容做简要介绍,如果你对webpack使用比较熟悉,可以跳过此节。

文件处理配置

和webpack文件处理相关的几个配置属性主要有三个:目录上下文信息(context), 处理文件入口信息(entry), 文件输出信息(output)。

目录上下文信息(context)

设置解析处理文件入口的相对目录,值为一个绝对目录路径,默认为当前执行目录,通常即项目根目录,在Node中其值与process.cwd()相同,如:

context: path.resolve(__dirname, 'src/'),

如上即解析为项目根目录下的src目录。

处理文件入口信息(entry)

处理文件入口,值可以是字符串,或数组,或对象,值为字符串或数组时,即输出单文件,值为对象,可以输出多文件,输出文件名称等信息参考文件输出信息(output)。

文件输出信息(output)

此配置声明webpack编译输出文件的文件名等信息,如:

filename: '[name].js',

声明文件名就是模块(chunk)名,对应在entry中定义的入口,你可能还见过[id],[hash],[chunkhash]这些用法,现做简单介绍:

  1. [id]:该值表示webpack编译模块(chunk)的id,通常是一个数字;
  2. [name]:该值表示webpack编译模块(chunk)名,对应entry中定义的入口名或文件名;
  3. [chunkhash]:该值表示webpack编译模块(chunk)hash值,根据模块内容计算出的一个md5值;
  4. [hash]:该值表示webapck编译对象hash值,根据编译对象计算出的md5值;

编译对象,即webpack执行时读取配置后生成的一个编译配置对象,包含模块,待编译文件,相对于上次编译的变更文件等诸多信息,需要注意的是该对象在webpack启动读取配置文件后形成,在此次编译过程保持不变。

  1. output.path:定义输出文件所在目录;
  2. output.publicPath:定义输出文件在浏览器访问时的基础相对路径,可以与后文webpack-dev-server一起使用。

webpack加载器与模块

在介绍加载器配置之前,先看看加载器是什么:

Loaders are transformations that are applied on a resource file of your app. They are functions (running in node.js) that take the source of a resource file as the parameter and return the new source.

加载器是作用于应用资源文件的转换器,它们是一系列函数,接受资源文件的内容做参数,然后返回新的资源(以一个模块的形式返回)。

webpack

webpack解析文件时使用的加载器都声明在module属性的loaders数组中,可以设置一个或多个加载器。

module.noParse:指定某些文件不需要使用解析,支持传入文件路径或正则表达式;

module.loaders:指定解析文件的加载器模块及各模块解析规则,可以设置以下属性:

  1. test: 待解析文件需匹配的规则,通常以文件后缀名称匹配文件;
  2. include:待解析文件所处目录;
  3. exclude: 过滤掉的目录;
  4. loader:加载器模块名称;
  5. loaders多个加载器;

模块解析规则配置

webpack支持在resolve属性对象中配置模块解析规则,主要有root,modules, alias和extensions属性。

resolve.root与resolve.modules

该属性设置的是在开发代码中使用require或import加载某模块时,webpack查找该模块所遵循的查找目录范围,如在源代码中存在:

var utils = require('utils/utils.js');

而root配置如下:

  resolve: {
    root: [
      path.resolve('./src/'),
      'node_modules'
    ]
  }

webpack编译时将自动在项目根目录下的src目录内的utils目录下查找utils.js,若存在,则返回,否则进入node_modules目录内查找utils.js模块。

当然,若未设置resolve.root属性值,则webpack默认先从node_modules查找模块,然后在根目录下查找。

注意:resolve.root在webpack v1版本中使用,而在webpack v2 中,使用modules代替,建议使用v2版本,后文也将统一使用modules属性。

resolve.alias

alias,有别名的意思,这里的作用是设置其他模块或路径的别名,webpack在解析模块时,将使用配置值替换该别名,如,在未设置alias属性内容时,即resolve.alias默认是空对象{}时,我们在代码中引用模块:

var Vue = require('vue/dist/vue.js');
var TopHeader = require('components/header.js');

webpack在编译代码时,按resolve.modules声明的顺序依次查找对应模块,如按照上一节定义的resolve.modules:

  resolve: {
    root: [
      path.resolve('./src/'),
      'node_modules'
    ]
  }

查找模块时,将首先在src/vue/dist/目录下寻找vue模块,在src/components/目录下查找header.js模块,查找到后返回,否则进入node_modules目录查找。

现在,我们还可以通过resolve.alias为模块或路径声明一个别名,更方便的声明加载模块:

  resolve: {
    alias: {
      'vue$': 'vue/dist/vue.js'
      components: path.resolve(__dirname, 'src/components/')
    }
  }

我可以使用如下方式加载模块:

var Vue = require('vue');
var TopHeader = require('components/header.js');

$符号

关于alias的详细使用介绍,请参见文档,本文并不是要介绍webpack文档,在这里介绍一下声明的vue$别名中的$符号:

这里的$符合是正则的文末匹配符,即只有当vue是最后一级路径时,webpack才会将该值解析成别名,进行别名与对应值替换,如vue/test.js中的vue是不会当作别名解析的,而components/header.js中的components则会按照声明的components别名进行解析,其结果是src/components/header.js。

resolve.extensions

该值定义解析模块时的查找文件的后缀顺序,如["", ".js", ".json"],会优先返回js文件,其次json文件,然后是其他文件,注意,这里数组传入了一个空字符串,他的作用是在未找到配置中所有列举的类型文件时,支持webpack返回其他类型文件,但是webpack2.x版本修改了,不支持传入空字符。

webpack插件配置

webpack还支持多种多样的插件拓展,你可以使用它们对你的项目webpack模块构建过程进行额外处理,如代码压缩,图片等资源提交压缩,构建异常捕获和提升,构建流程时间消耗比,等等,而关于这些插件使用的配置在plugins属性数组内,将在后续进行介绍。

项目本地调试与开发

为了方便开发和调试,通常都需要在本地主机开启服务,提供局域网内多终端访问,并且在文件变更时,实时刷新页面,正如grunt和gulp中Browsersync插件提供的功能一样,webpack可以使用webpack-dev-server模块实现。

webpack-dev-server是一个Node.js的express服务器,以webpack开发中间件的形式为webpack包提供服务,当监听到源码文件变更时,会自动重新打包,并且支持配置自动刷新浏览器,重新加载资源。

安装

由于该插件只用于开发模式,所以通过以下npm指令安装:

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

配置

启用webpack-dev-server时,其默认开启8080端口,访问localhost:8080返回当前目录下的index.html,即执行指令当前目录下的静态资源,当然可以通过指令传递参数或在配置文件进行配置指定静态资源目录。

另外需要注意的是,开启webpack-dev-server后,变更文件重新打包后,并不会实际输出到配置的output目录,而是在publicPath属性声明的相对路径所在的内存中读取。

静态资源目录配置(CONTENT BASE)

webpack-dev-server --content-base src/

执行以上指令开启服务后,webpack-dev-server将默认在src/目录返回静态资源,当然也可以在webpack.config.js配置文件中指定:

  devServer: {
    contentBase: './src'
  }

访问http://localhost:8080和http://localhost:8080/index.html效果一样,均返回src目录下的index.html文件。

PUBLICPATH与输出文件访问

在前文webpack配置一节中提到output.publicPath属性值表示,在浏览器访问webpack output输出的文件时的基础相对路径,如设置:

  output: {
    path: 'dist/scripts',
    filename: 'app.js',
    publicPath: 'assets/'
  }

则在html文件中引用该app.js文件的方式如下:

<script src="assets/app.js"></script>

在浏览器中访问app.js的方式为:http://localhost:8080/assets/app.js

自动刷新(AUTOMATIC REFRESH)

前面说到webpack-dev-server支持文件变更时,自动刷新浏览器,这也是开发者急需的功能,webpack-dev-server支持两种方式实现:

  1. iframe模式(iframe mode):页面通过iframe窗口插入然后变更时自动重新加载;
  2. inline模式(inline mode):通过sock.js(比如websocket协议,轮询等方式)在页面嵌入一个小型客户端与webpack-dev-server服务器建立连接,当发生变更重新打包时,通过此连接通知页面重新加载;

iframe模式

使用默认的iframe模式时,不需要进行任何配置,可以直接访问:http://localhost:8080/webpack-dev-server/index.html即可,如图,通过iframe插入我们的页面:

注意:

  1. 在应用页面上方会有状态栏显示当前应用信息;
  2. 应用URL的变更发生在iframe内部,不会反映在浏览器地址栏;

inline模式

要开启inline模式,只需要指定--inline命令行参数或在配置文件中指定inline: true:

  devServer: {
    contentBase: './src',
    inline: true
  }

在此模式下,直接访问http://localhost:8080/index.html或http://localhost:8080即可,此模式与iframe模式的区别在于:

  1. 访问URL不同;
  2. 需指定inline配置参数;
  3. 应用信息在控制台输出;
  4. 应用URL的变更直接反映在浏览器地址栏;

其实inline模式还可以配合Node.Js服务运行,之后再介绍,这里只说明了其在HTML文档中的使用。

热替换(HOT MODULE REPLACEMENT)

除了自动刷新,webpack-dev-server的另一大卖点是模块热替换,那么热替换到底是什么?

热替换,即文件发生变更时,webpack包只替换发生变更的模块,而不需要全部替换;浏览器不需要完全重新加载,而可以直接将变更的模块注入到运行中的应用。

开启热替换功能需要指定--hot指令参数,或在配置文件中添加:

  devServer: {
    contentBase: './src',
    inline: true,
    hot: true
  }

注意到以上代码,热替换需要与inline模式一起使用,另外需要指定output.publicPath值。

HotModuleReplacementPlugin

配置好后还需要使用webpack.HotModuleReplacementPlugin插件,才能真正启用热替换功能:

  plugins: [
    new webpack.HotModuleReplacementPlugin()
  ]

同样的,热替换可以搭配Node.js服务一起使用,之后介绍。

如图,为每个文件(app.js, test.js)都实现了HMR热替换,当发生变更时,只更新变更模块,而不是重新加载所有文件:

拥抱ES6

ES6推出以来,广受Jser们青睐,其确实有很多新特性和新规范,值得我们深入学习并使用,未来所有的JavaScript应用都应该拥抱ES6,不过,目前各大浏览器都在推进ES6的实现,在兼容实现之前,我们还需要过渡性的将其转换成ES5语法,最通用的方式就是使用babel转换。

使用BABEL加载器

首先,为了能使用webpack和babel转换js代码,需要使用babel-loader加载器,另外还需要安装babel转换js的转换规则插件,如babel-preset-es2015定义了转换规则,安装方式如下:

npm install --save-dev babel-loader babel-preset-es2015

然后在根目录下创建.babelrc文件,内容:

  {
    "presets": ["es2015"]
  }

在webpack.config.js配置文件中,添加相关loader配置:

  module: {
    loaders: [
      {
        test: /\.(js|vue)$/,
        exclude: /node_modules/,
        loader: 'babel-loader'
      }
    ]
  }

其中,test匹配需要转换的文件,exclude匹配不需要转换的文件或目录。

BABEL-POLYFILL

我们需要明白的一点是babel-preset-es2015能做的,只是转换ES6代码成ES5,使得浏览器可以解析执行,但是对于ES6新提出的API,如Promise,Generator等无法简单的转换成ES5代码,这时就需要babel-polyfill了,babel-polyfill是一个垫片,它可以模拟提供所有的ES6功能和特性,可以看作是提供了一个模拟的全局ES6环境。

安装

安装依然很简单,由于是垫片,是需要在源码中使用的,所有指定--save参数:

npm install --save babel-polyfill

使用

不同于babel-preset-es2015,babel-polyfill需要直接打包进源码,而且需要在使用ES6代码前引入一次:

import 'babel-polyfill'

只需要引入一次,因为该垫片提供的是一个模拟的全局ES6环境,而不是模块内部的。

或者直接在webpack.config.js中配置打包入口文件时加入该垫片:

  entry: {
    app: ['babel-polyfill', './scripts/app.js']
  },

现在你可以在你的代码中使用任何你想用的ES6 API了。

到此,基本介绍了如何使用webpack搭建开发环境,下一篇将开始介绍如何使用webpack处理CSS及如何使用Vue进行组件化开发。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • 详解从零搭建 vue2 vue-router2 webpack3 工程

    以新手视角,详细介绍各个步骤内容,不深入讲步骤涉及的原理,主要介绍如何操作. 初始化工程 新建工程目录 vue2practice,在目录下执行npm init -y来创建一个 package.json,在 package.json 中先添加以下必备模块: { "name": "vue2-vue-router2-webpack3", "version": "1.0.0", "devDependencies":

  • 详解webpack+angular2开发环境搭建

    刚搭建完一个webpack+angular2环境,由于angular及webpack官网上没有一个折中的搭建方案,所以只能摸索着搭建,中间遇到一些坑,遂总结记录下来,以供交流. 搭建完后的项目初步环境如下: app ----app.component.ts ----app.module.ts ----main.ts index.html package.json tsconfig.json webpack.config.js app.componnet.ts:组件文件.angular2应用是由组

  • 详解用webpack2搭建angular2的项目

    webpack2和angular2搭建的项目 github地址:项目链接 npm install,安装依赖包 npm run dev,启动本地工程,在localhost:1699进行预览 package.json { "name": "angular-webpack", "version": "1.0.0", "description": "webpack2 & angular2"

  • windows下vue-cli及webpack搭建安装环境

    1.安装Node.js,node.js安装包及源码下载地址为:https://nodejs.org/en/download/. 2.安装npm,由于新版的nodejs已经集成了npm,所以之前npm也一并安装好了.同样可以通过输入 "npm -v" 来测试是否成功安装.命令如下,出现版本提示表示安装成功: $ npm -v 3.10.8 如果你安装的是旧版本的 npm,可以很容易得通过 npm 命令来升级,命令如下: npm install npm -g 你可以使用淘宝定制的 cnpm

  • 详解使用vue脚手架工具搭建vue-webpack项目

    对于Vue.js来说,如果你想要快速开始,那么只需要在你的html中引入一个<script>标签,加上CDN的地址即可.但是,这并不算是一个完整的vue实际应用.在实际应用中,我们必须要一系列的工具,包括:模块化,转译,预处理,热加载,静态检测和自动化测试等.对于一个需要长期维护和大型的项目而言,这些工具是必不可少的,但是尝试配置初始化这些很痛苦.这就是我们发布vue官方提供的脚手架工具的原因,一个简单的构建工具,通过几个默认的步骤帮助你快速的构建Vue.js项目. 1.安装node环境 可以

  • Vue-cli-webpack搭建斗鱼直播步骤详解

    前言 想必大家都看过斗鱼直播吧?这次在下使用从github上面摸下来的API,为大家重现一下斗鱼网站的搭建,使用vue-cli-webpack来实现. 声明 本文章所用API均从网络获取,本文作者不承担任何法律责任,请阅读本文的小伙伴们用于学习用途,不能用于商业! 如有侵权行为,请与作者联系,作者将于2日内删除. 效果 pc端 移动端 开始 好,扯了这么久的淡,该开始构建项目了 项目初始化 初始化文件夹 打开一个新文件夹,在命令行输入: vue init webpack 如果显示vue not

  • vue+node+webpack环境搭建教程

    一.环境搭建 1.1.去官网安装node.js(http://www.runoob.com/nodejs/nodejs-install-setup.html ) 注意node的版本,只有支持和谐模式的node才会支持es6,在基于webpack构建项目名称时才不会报错.推荐最新版本. 下载安装包之后直接点击安装即可.测试安装成功的界面如下: 1.2.利用npm安装webpack命令行语句为npm install webpack -g.测试安装成功的界面如下: 1.3.下面就是安装淘宝镜像,如下图

  • 详解用vue-cli来搭建vue项目和webpack

    vue-cli 用vue-cli来搭建vue项目 第一步:全局安装vue-cli sudo npm install vue-cli -g 第二步:初始化一个项目 vue init webpack-simple projectName 第三步:把文件切换到初始化的项目中 cd projectName 第四步:安装依赖 npm install 当然也可以用淘宝镜像cnpm来安装,这样快很多 cnpm install 第五步:运行 npm run dev 完成一个初始化vue项目 webpack 要开

  • 详解基于webpack搭建react运行环境

    最近由于项目需要,所以尝试使用webpack搭建react运行环境,在克服了一系列困难后,终于能在页面输出"Hello World",特地把整个过程记录下来,利人利己. 首先我创建了一个文件夹webpack-helloworld-demo,之后的大部分操作都会在这个文件夹下进行. 1.初始化文件夹 npm init //初始化一个package.json文件 git init //产生.git文件,便于之后版本提交回退 2.搭建webpack环境 npm install webpack

  • 详解webpack与SPA实践之开发环境搭建

    目前,公司前端项目开发技术栈基本改造为使用gulp进行自动化构建,webpack进行项目模块化依赖管理,Vue+ Vuex + Vue-Router作为项目组件化开发框架,为了更深入的理解.使用当前技术栈并与读者分享.交流,计划推出一系列相关学习与实践文章.本篇为开篇,主要讲述如何使用webpack搭建开发环境. 项目初始化 以你喜欢的任意方式,创建项目根目录,如: mkdir vue-hello 初始化包模块管理文件 进入项目根目录,初始化项目包模块管理文件package.json: npm

  • 详解如何配置CLion作为Qt5开发环境的方法

    使用Qt进行程序开发时QtCreator总是不二之选.作为老牌IDE在提供了强大的功能同时也对Qt的支持做了许多优化.如果没有特别的原因你应该使用它. 然而一个顺手的工具将会极大得提升生产效率,而如果你之前使用别的工具进行开发,那么就要斟酌一下学习使用QtCreator的成本了. 所以我将介绍配置CLion(另一个强大的c++ IDE)作为Qt5的开发环境,在利用现有工具链的同时避免了安装另一个大型软件. 准备工作 CLion的安装和激活超出了本文的讨论范围,我们假设你已经安装好了CLion.如

  • 详解使用create-react-app快速构建React开发环境

    最近在折腾react开发,总结一个react环境搭建的教程,写得比较细碎,基本上就是自己的搭建步骤了,希望能够帮助到有需要的小伙伴. 常用的脚手架 react-boilerplate react-redux-starter-kit create-react-app(git上关注量最大) 使用 create-react-app 快速构建 React 开发环境 create-react-app 是来自于 Facebook,通过该命令我们无需配置就能快速构建 React 开发环境. create-re

  • 详解webpack+express多页站点开发

    学习了webpack门级的教程后,觉得可能是专门为单页应用而量身打造的,比如webpack+react.webpack+vue等,都可以解决各种资源的依赖加载.打包的问题.甚至css都是打包在js里去动态添加到dom文档中的. 那如果我们想要想要多页的普通的web站点,css独立出来,js加载需要模块? 项目地址:webpackDemo_jb51.rar 初始化项目.安装依赖 package.json "devDependencies": { "css-loader"

  • 详解如何用docker安装laravel开发环境

    看laravel框架的官方文档安装部分时,发现需要安装特别多软件,估计还有许多复杂的配置,官方推荐使用Laravel Homestead虚拟机进行安装,但是我想现在既然有 docker这么好的东西,为什么不用呢? Docker vs Vagrant 为什么使用Docker而不是Vagrant:从时间上来看,Vagrant提供虚拟机需要数分钟,而Docker只需数秒:此外,从体量上来看,Vagrant提供的是完整的虚拟机,而Docker提供的是轻量级的虚拟容器,这些虚拟容器共享同一个内核并且允许在

  • 详解webpack 入门与解析

    每次学新东西总感觉自己是不是变笨了,看了几个博客,试着试着就跑不下去,无奈只有去看官方文档. webpack是基于node的.先安装最新的node. 1.初始化 安装node后,新建一个目录,比如html5.cmd中切到当前文件夹. npm init -y 这个命令会创建一个默认的package.json.它包含了项目的一些配置参数,通过它可以进行初始安装.详细参数:https://docs.npmjs.com/files/package.json. 不要y参数的话,会在命令框中设置各项参数,但

  • 详解webpack之scss和postcss-loader的配置

    本文介绍了详解webpack之scss和postcss-loader的配置,分享给大家,具体如下: 开始 npm i sass-loader node-sass postcss-loader autoprefixer 首先配置postcss-loader 在这里postcss是为了来给浏览器内核添加私有前缀.当前postcss还有其他操作比如px2rem之类的.可以把postcss想象成babel-core只是一个控制中心,主要的还是它分散出来的插件. /**** package.json **

  • 详解webpack 打包文件体积过大解决方案(code splitting)

    优化对比 : 未优化前:index.html引入一个main.js文件,体积2M以上. 优化后入:index.html引入main.js.commons.js.charts.js.other.js.以达到将main.js平分目的.每个文件控制300k以内.(如果高兴100k也没问题) 用到的一堆库及工具: vue.webpack.babel.highcharts.echarts.jquery.html2canvas******此去省略若干m代码 问题: 开发环境用webpack后发现单个js文件

  • 详解webpack模块化管理和打包工具

    本篇文章主要介绍了详解webpack模块化管理和打包工具,小编觉得挺不错的,现在分享给大家,也给大家做个参考.一起跟随小编过来看看吧 Webpack简介 webpack是当下最热门的前端资源模块化管理和打包工具. 它可以将许多松散的模块按照依赖和规则打包成符合生产环境部署的前端资源.还可以将按需加载的模块进行代码分隔,等到实际 需要的时候再异步加载.通过 loader  的转换,任何形式的资源都可以视作模块,比如 CommonJs 模块. AMD 模块. ES6 模块.CSS.图片. JSON.

  • 详解webpack的文件监听实现(热更新)

    前言 文件监听是在源码发生变化时,自动重新构建出新的输出文件. webpack 开启监听模式,有两种方式: 1.启动 webpack 命令时,带上 --watch 参数.  唯一缺点:需要手动刷新才能看到变化: 2.在配置 webpack.config.js 中设置 watch: true.  优点: (1) WDS 不刷新浏览器 (2) WDS 不输出文件,⽽是放在内存中 (3) 使⽤用 HotModuleReplacementPlugin 插件 1 第一种方式, --watch 1.1 配置

随机推荐