`

[译]webpack官网文档 :指南 -- 14.辅助

阅读更多

原创翻译,转载请注明出处。 

原文地址:https://webpack.js.org/guides/shimming/

 

Webpack作为一个模块打包工具,能识别由ES2015模块,CommonJSAMD编写的模块。但是有时候,使用第三方库的时候,它们期望有些依赖是全局可用的,给jquery定义别名$。它们也可能会创建用来导出的全局变量。这里我们会看到几种帮助webpack识别这些零碎模块的方式。

#相对于被打包的dist版本,更喜欢未压缩的CommonJS/AMD文件

很多模块在package.jsonmain字段里指定dist版本的链接。虽然这可能对大多数的开发者有利,但是对于webpack最好指定到src版本,因为这样的话,webpack能更好的优化依赖。不管怎样多数情况下dist版本也工作的很好。

// webpack.config.js
 
module.exports ={
    ...
    resolve:{
        alias:{
            jquery:"jquery/src/jquery"
        }
    }
};

 

ProvidePlugin

ProvidePlugin插件可以把一个模块像一个变量一样,提供给webapck请求的所有模块。只有当你使用这个变量的时候,这个模块才会被请求。一些既有的模块使用一些已经存在的特定的全局变量,像jQuery插件使用$jQuery。这种情境下,你可以通过配置webpack,每一个使用全局$标识符的地方,都会先执行var $ = require(“jquery”)

module.exports ={
  plugins:[
    newwebpack.ProvidePlugin({
      $:'jquery',
      jQuery:'jquery'
    })
  ]
};

 

这个插件还可以通过配置一个格式为[module, child, ...children?]路径数组,导出特定的模块。下面的配置就可以从TypeScripttslib包里引入__assign函数,不管在哪里都可以使用它。

module.exports ={
  plugins:[
    newwebpack.ProvidePlugin({
      __assign:['tslib','__assign'],
      __extends:['tslib','__extends'],
    })
  ]
};

 

imports-loader

imports-loader可以在请求的既存模块里插入必要的全局变量,一些既存的模块把this作为window对象。当这种模块在CommonJS上下文环境里执行的时候会发生问题,this等同于module.exports。这种情况下可以使用imports-loader来复写this

webpack.config.js

module.exports ={
  module:{
    rules:[{
      test: require.resolve("some-module"),
      use:'imports-loader?this=>window'
    }]
  }
};

 

一些模块支持不同的模块类型,像AMDCommonJS和既存默认的。多数情况下他们先检查define,然后用一些复杂的代码导出变量。在这种情况下,可以设定define=false来强制设定CommonJS路径。

webpack.config.js

module.exports ={
  module:{
    rules:[{
      test: require.resolve("some-module"),
      use:'imports-loader?define=>false'
    }]
  }
};

 

exports-loader

一个库创建了一些它认为用户会使用的全局变量,这种情况下,我们可以使用exports-loader,在CommonJS格式下导出全局变量。例如为了以file导出file,以parse导出helpers.parse

webpack.config.js

module.exports ={
  module:{
    rules:[{
      test: require.resolve("some-module"),
      use:'exports-loader?file,parse=helpers.parse'
      // adds below code the file's source:
      //  exports["file"] = file;
      //  exports["parse"] = helpers.parse;
    }]
  }
};

 

script-loader

Script-loader在全局上下文里提供代码,就像你把代码加到script标签里一样。这种模式下,每一个普通的库应该都适用。requiremodule等还不确定。

假设你有一个legacy.js文件,包含:

GLOBAL_CONFIG ={};

 

使用script-loader…

require('script-loader!legacy.js');

 

基本用法:

eval("GLOBAL_CONFIG = {};");

 

noParse选项

当没有AMD或者CommonSJ版本的模块的前提下,你还想引入dist,你可以把模块标记成noParse。这样webpack就只是引入模块而不解析它,这样可以提高编译时间。

module.exports ={
  module:{
    noParse:/jquery|backbone/
  }
};

 

 

-- End --

 

0
0
分享到:
评论

相关推荐

    Laravel开发-laravel-jos .zip.zip

    【描述】:这个压缩包可能包含了一系列关于Laravel Jos项目的源代码、教程文档、示例应用和其他辅助材料。"Laravel Jos"可能是项目的名字,或者是特定功能或模块的简称。用户可以通过解压并学习这些内容来深入了解...

    全栈增长工程师指南---文字版.pdf

    它们提供了代码高亮、代码提示、断点调试等辅助功能,帮助提高开发效率。此外,快速启动软件、DEBUG工具、终端或命令提示符以及包管理工具也是提高开发效率的关键工具。 环境搭建对于全栈工程师来说同样重要。这...

    前端开源库-maptalks-build-helpers.zip

    "maptalks-build-helpers" 是Maptalks项目的一部分,包含了构建和开发Maptalks库时所需的辅助工具和脚本。 在Maptalks的构建过程中,"build-helpers" 文件夹通常包含以下关键组成部分: 1. **配置文件**:如`...

    JS-HTML-Format.zip_html javascript

    4. **代码压缩**:为了减少网络传输时间和提高加载速度,开发中会使用工具如UglifyJS、Terser或Webpack等对JavaScript和CSS进行压缩,去除空格、换行和不必要的字符,甚至进行变量名混淆。 5. **代码查看和调试**:...

    q337547038-ak-vue-master.zip

    1. `README.md`:项目说明文档,通常包括安装指南、使用示例和贡献规则等。 2. `src`:源代码目录,包含Vue组件、样式和逻辑代码。 - `components`:存放自定义的UI组件。 - `styles`:CSS或Sass/LESS等样式文件,...

    前端项目-jclic.js.zip

    4. **文档**:可能包含README文件,提供项目介绍、安装指南、API参考以及使用示例,帮助开发者快速上手。 5. **资源**:可能包含图片、音频、视频等素材,这些都是创建JClic活动时可能用到的多媒体资源。 6. **构建...

    前端项目-pnp-sp.zip

    2. **配置文件**:配置文件可能包含项目构建和打包的相关设置,如webpack.config.js或package.json。这些文件定义了项目如何被编译、打包以及依赖项的管理。 3. **示例和测试**:示例代码(通常在examples或samples...

    前端开发主要使用 HTML、CSS 和 JavaScript 来实现

    前端开发,又称客户端开发,指的是创建和维护网站或应用程序的用户界面和用户体验的过程。它侧重于可视化的部分,即用户可以直接看到并与之互动的部分。前端开发的核心在于提供直观、友好且高效的用户体验。 #### ...

    前端项目-egjs-flicking.zip

    3. **文档**:项目文档可能包括`README.md`,其中会详述如何安装、初始化、配置和自定义`Flicking`组件。此外,还可能有API参考和指南,帮助开发者深入理解和使用这个库。 4. **样式**:`css`文件可能包含必要的...

    前端项目-ef.js.zip

    除了核心功能,ef.js可能还具备了一些辅助开发的特性,如自动化任务运行器(例如Gulp或Webpack)、代码检查和格式化工具(如ESLint和Prettier)、以及测试框架(如Jest或Mocha)。这些工具能够优化开发流程,提高...

    element-ui-helper-master.zip

    9. **文档和教程**: 可能包含了一份详细的用户指南或教程,解释了如何使用这些辅助工具和最佳实践,以帮助开发者快速上手。 10. **持续集成与自动化测试**: 高质量的项目通常会采用持续集成(CI)和自动化测试。...

    前端开源库-solid-namespace.zip

    6. **README**:项目简介、安装指南、贡献指南等信息,帮助开发者了解项目背景和参与方式。 Solid库的一些关键特性包括: 1. **响应式系统**:Solid使用其自定义的响应式系统,能够在数据变化时高效地追踪依赖关系...

    vue-templates/webpack

    10. **docs**:这个目录可能包含了项目相关的文档,如API参考、用户指南等,便于开发者和用户理解项目。 总的来说,`vue-templates/webpack` 提供了一套完整的Vue.js开发环境,包含了Webpack的配置、项目管理和自动...

    前端项目-r2d3.zip

    3. **文档**:可能包括README文件,解释了项目的用途、安装指南、API参考和使用示例。这对于开发者理解和使用该项目至关重要。 4. **资源文件**:如图片、字体或其他媒体文件,可能被用作可视化的一部分或者作为...

    eka-web.rar

    9. **文档**:README.md或其他形式的项目文档,解释如何安装、运行和使用项目。 10. **许可证文件**:LICENSE文件,说明项目使用的开源协议。 11. **静态资源**:如 favicon.ico(浏览器标签页图标)和robots.txt...

    webpack-helpers:可重用的Webpack配置组件和相关的帮助程序实用程序

    该软件包提供了Webpack配置和相关辅助方法的可重用片段,否则这些片段将需要在许多项目组件之间重复。 访问以查看完整的项目文档,包括每个包含的模块的指南和入门说明。 访问文件夹以查看或修改用于生成此文档...

    talks-master.rar

    8. **文档**:README文件或其他文档可以提供项目背景、安装指南、使用示例等信息。 9. **许可证**:开源项目通常会有LICENSE文件,说明代码的使用权限和条件。 10. **问题追踪**:可能包含一个ISSUE_TEMPLATE,用于...

    A-Plugin:A-Plugin —— 前端开发工具

    为了方便用户理解和使用,`A-Plugin`通常会提供详尽的文档和教程,包括安装指南、API参考、示例代码等,帮助开发者快速上手并发挥其最大价值。 总结,`A-Plugin`是前端开发者的得力助手,它通过整合各种工具和插件...

    SIMURAN-源码.rar

    因此,下载并解压"SIMURAN-源码.zip"后,开发者可以期待找到README文件、安装指南、API文档和其他辅助材料。 由于没有提供具体的标签,我们无法得知SIMURAN的用途或技术栈。不过,通常来说,一个开源项目可能会涉及...

    jswerve-源码.rar

    7. **文档**:可能有README文件或其他形式的文档,解释项目的目的、如何安装和使用,以及开发者指南。 8. **测试**:源代码中可能包含测试用例,使用Jest、Mocha或其他测试框架确保代码质量。 9. **模块化**:如果...

Global site tag (gtag.js) - Google Analytics