怎样使用webpack模块化管理和打包工具

这次给大家带来怎样使用webpack模块化管理和打包工具,使用webpack模块化管理和打包工具的注意事项有哪些,下面就是实战案例,一起来看一下。

 Webpack简介

webpack是当下最热门的前端资源模块化管理和打包工具。 它可以将许多松散的模块按照依赖和规则打包成符合生产环境部署的前端资源。还可以将按需加载的模块进行代码分隔,等到实际

需要的时候再异步加载。通过 loader  的转换,任何形式的资源都可以视作模块,比如 CommonJs 模块、 AMD 模块、 ES6 模块、CSS、图片、 JSON、Coffeescript、 LESS 等。

模块系统的演进标签


登录后复制

这是最原始的 JavaScript 文件加载方式,如果把每一个文件看做是一个模块,那么他们的接口通常是暴露在全局作用域下,也就是定义在 window  对象中,

不同模块的接口调用都是一个作用域中,一些复杂的框架,会使用命名空间的概念来组织这些模块的接口,典型的例子如 YUI  库。

这种原始的加载方式暴露了一些显而易见的弊端:

全局作用域下容易造成变量冲突

文件只能按照   的书写顺序进行加载

开发人员必须主观解决模块和代码库的依赖关系

在大型项目中各种资源难以管理,长期积累的问题导致代码库混乱不堪

CommonJS规范

CommonJS 是以在浏览器环境之外构建 JavaScript 生态系统为目标而产生的项目,比如在服务器和桌面环境中。

CommonJS 规范是为了解决 JavaScript 的作用域问题而定义的模块形式,可以使每个模块它自身的命名空间中执行。该规范的主要内容是,模块必须通过 module.exports  导出对外的变量 或接口,通过   require()  来导入其他模块的输出到当前模块作用域中。

一个直观的例子

// moduleA.jsmodule.exports = function( value ){  return value * 2;}// moduleB.jsvar multiplyBy2 = require('./moduleA');var result = multiplyBy2(4);

登录后复制

AMD规范

AMD(异步模块定义)是为浏览器环境设计的,因为 CommonJS 模块系统是同步加载的,当前浏览器环境还没有准备好同步加载模块的条件。

模块通过 define  函数定义在闭包中,格式如下:

define(id?: String, dependencies?: String[], factory: Function|Object);

登录后复制

id  是模块的名字,它是可选的参数。

factory  是最后一个参数,它包裹了模块的具体实现,它是一个函数或者对象。如果是函数,那么它的返回值就是模块的输出接口或值。

一些用例

定义一个名为 myModule  的模块,它依赖   jQuery  模块:

define('myModule', ['jquery'], function($) {  // $ 是 jquery 模块的输出  $('body').text('hello world');}); // 使用 require(['myModule'], function(myModule) {});

登录后复制

注意 :在 webpack 中,模块名只有局部作用域,在 Require.js 中模块名是全局作用域,可以在全局引用。

定义一个没有 id  值的匿名模块,通常作为应用的启动函数:

define(['jquery'], function($) {  $('body').text('hello world');});

登录后复制

AMD 也采用require()语句加载模块,但不同于CommonJS,他要求两个参数

第一个参数[module],是一个数组,里面的成员就是要加载的模块; 第二个参数callback,则是加载成功之后的回调函数。如果将前面的代码改写成AMD形式,就是下面这样:

math.add()与math模块加载不是同步的,浏览器不会发生假死。所以很显然,AMD比较适合浏览器环境

目前,主要有两个Javascript库实现了AMD规范: require.js 和 curl.js

 require(['math'], function (math) {    math.add(2, 3);  });

登录后复制

什么是 Webpack

Webpack 是一个模块打包器。它将根据模块的依赖关系进行静态分析,然后将这些模块按照指定的规则生成对应的静态资源。

Webpack 的特点

代码拆分

Loader

智能解析

插件系统

快速运行

webpack基本使用

创建项目根目录

初始化

npm init 或 npm init -y

登录后复制

全局安装

npm install webpack -g

登录后复制

局部安装,在项目目录下安装

npm install webpack --save-dev

登录后复制

–save: 将安装的包的信息保存在package中

–dev:开发版本,只是项目构建的时候使用,项目构建完成后并不依赖的文件

如果使用web开发工具,单独安装

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

登录后复制

基本使用

首先创建一个静态页面 index.html 和一个 JS 入口文件 entry.js:

登录后复制

创建entry.js

// entry.js : 在页面中打印出一句话document.write('It works.')

登录后复制

然后编译 entry.js并打包到 bundle.js文件中

// 使用npm命令 webpack entry.js bundle.js

登录后复制

使用模块

1.创建模块module.js,在内部导出内容

module.exports = 'It works from module.js'

登录后复制

2.在entry.js中使用自定义的模块

//entry.jsdocument.write('It works.')document.write(require('./module.js')) // 添加模块

登录后复制

加载css模块

1.安装css-loader

npm install css-loader style-loader --save-dev

登录后复制

2.创建css文件

//style.cssbody { background: yellow; }

登录后复制

3.修改 entry.js:

require("!style-loader!css-loader!./style.css") // 载入 style.cssdocument.write('It works.')document.write(require('./module.js'))

登录后复制

创建配置文件webpack.config.js

1.创建文件

var webpack = require('webpack')module.exports = { entry: './entry.js', output: {  path: dirname,  filename: 'bundle.js' }, module: {  loaders: [    //同时简化 entry.js 中的 style.css 加载方式:require('./style.css')   {test: /.css$/, loader: 'style-loader!css-loader'}  ] }}

登录后复制

2.修改 entry.js 中的 style.css 加载方式:require(‘./style.css’)

3.运行webpack

在命令行页面直接输入webpack

插件使用

1.插件安装

//添加注释的插件npm install --save-devbannerplugin

登录后复制

2.配置文件的书写

var webpack = require('webpack')module.exports = {  entry: './entry.js',  output: {    path: dirname,    filename: 'bundle.js'  },  module: {    loaders: [      //同时简化 entry.js 中的 style.css 加载方式:require('./style.css')      {        test: /.css$/,        loader: 'style-loader!css-loader'      }    ],    plugins: [      //添加注释的插件      new webpack.BannerPlugin('This file is created by zhaoda')    ]  }}

登录后复制

3.运行webpack

// 可以在bundle.js的头部看到注释信息/*! This file is created by zhaoda */

登录后复制

开发环境

webpack

–progress : 显示编译的进度

–colors : 带颜色显示,美化输出

–watch : 开启监视器,不用每次变化后都手动编译

12.4.7.1. webpack-dev-server

开启服务,以监听模式自动运行

1.安装包

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

登录后复制

2.启动服务

实时监控页面并自动刷新

webpack-dev-server --progress --colors

登录后复制

自动编译

1.安装插件

npm install --save-dev html-webpack-plugin

登录后复制

2.在配置文件中导入包

var htmlWebpackPlugin = require('html-webpack-plugin')

登录后复制

3.在配置文件中使用插件

plugins: [    //添加注释的插件    new webpack.BannerPlugin('This file is created by zhaoda'),    //自动编译    new htmlWebpackPlugin({      title: "index",      filename: 'index.html', //在内存中生成的网页的名称      template: './index.html' //生成网页名称的依据    })  ]

登录后复制

4.运行项目

webpack--save-dev

登录后复制

相信看了本文案例你已经掌握了方法,更多精彩请关注【创想鸟】其它相关文章!

推荐阅读:

怎样使用vue.js与element-ui实现菜单树形结构

如何使用JS装饰器函数

以上就是怎样使用webpack模块化管理和打包工具的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2750668.html

(0)
上一篇 2025年3月8日 05:41:03
下一篇 2025年2月26日 02:35:39

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • 利用vue+webpack如何解决打包文件 404 页面空白问题

    下面我就为大家分享一篇vue+webpack 打包文件 404 页面空白的解决方法,具有很好的参考价值,希望对大家有所帮助。 最近用vue-cli+vue-router+webpack建立项目,其中的遇到的三个问题,整理如下: vue-cl…

    2025年3月8日
    200
  • 通过webpack项目如何实现调试以及独立打包配置文件(详细教程)

    下面我就为大家分享一篇webpack项目调试以及独立打包配置文件的方法,具有很好的参考价值,希望对大家有所帮助。 webpack项目调试 -sourcemap webpack配置提供了devtool这个选项,如果设置为 ‘#source-m…

    编程技术 2025年3月8日
    200
  • 通过vue-cli+webpack项目如何实现修改项目名称

    下面我就为大家分享一篇vue-cli+webpack项目 修改项目名称的方法,具有很好的参考价值,希望对大家有所帮助。 使用vue-cli+webpack创建的项目,修改文件名称或者更改文件的位置,运营时会报错,是因为npm项目,在安装依赖…

    编程技术 2025年3月8日
    200
  • 后端程序员JS模块化使用说明

    这次给大家带来后端程序员JS模块化使用说明,后端程序员JS模块化使用的注意事项有哪些,下面就是实战案例,一起来看一下。 基础模式 匿名闭包 匿名闭包是很常用的代码隔离方式,声明匿名对象并立即执行。匿名函数中声明的变量和方法以及匿名函数本身不…

    编程技术 2025年3月8日
    200
  • 为什么web开发中需要避免使用全局变量

    这次给大家带来为什么web开发中需要避免使用全局变量,web开发中避免使用全局变量的注意事项有哪些,下面就是实战案例,一起来看一下。 全局变量带来的问题主要是:随着代码量的增长,过多的全局变量会导致代码难以维护,并且容易出bug。一两个全局…

    编程技术 2025年3月8日
    200
  • web开发中事件处理规则有哪些

    这次给大家带来web开发中事件处理规则有哪些,web开发中事件处理的注意事项有哪些,下面就是实战案例,一起来看一下。 事件处理 我们知道事件触发时,事件对象(event对象)会作为回调参数传入事件处理程序中,举个例子: // 不好的写法fu…

    编程技术 2025年3月8日
    200
  • web开发中如何避免空比较

    这次给大家带来web开发中如何避免空比较,web开发中避免空比较的注意事项有哪些,下面就是实战案例,一起来看一下。 在JS中,我们常常会看到这种代码:变量与null的比较(这种用法很有问题),用来判断变量是否被赋予了一个合理的值。比如: v…

    编程技术 2025年3月8日
    200
  • web开发中怎样检测原始值

    这次给大家带来web开发中怎样检测原始值,web开发中检测原始值的注意事项有哪些,下面就是实战案例,一起来看一下。 在JS中有5种原始类型:字符串、数字、布尔值、null和undefined。如果你希望一个值是字符串、数字、布尔值或者und…

    编程技术 2025年3月8日
    200
  • web开发中怎样检测引用值

    这次给大家带来web开发中怎样检测引用值,web开发中检测引用值的注意事项有哪些,下面就是实战案例,一起来看一下。 引用值也称作对象(object)。在JS中除了原始值之外的值都是引用。有这样几种内置的引用类型:Object、Array、D…

    编程技术 2025年3月8日
    200
  • web开发中怎样检测函数

    这次给大家带来web开发中怎样检测函数,web开发中检测函数的注意事项有哪些,下面就是实战案例,一起来看一下。 从技术上讲,JS中的函数是引用类型,同样存在Function构造函数,每个函数都是其实例,比如: function myFunc…

    编程技术 2025年3月8日
    200

发表回复

登录后才能评论