Skip to content

Commit 5953c70

Browse files
Update shimming.md
1 parent bef2d1e commit 5953c70

File tree

1 file changed

+20
-22
lines changed

1 file changed

+20
-22
lines changed

content/guides/shimming.md

Lines changed: 20 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,11 @@ contributors:
77
- simon04
88
---
99

10-
`webpack`作为模块打包工具可以支持使用ES2015模块,CommonJS或者AMD编写的模块。但是很多时候,当使用第三方的库的时候,我们可以看出还需要一些依赖比如对于`jqueray`的全局别名`$`它们也可能产生其它需要被导出的全局变量。在此,我们一起来看一下帮助webpack理解这些**不完整的模块**的方式
10+
`webpack` 作为模块打包工具可以支持 ES2015 模块,根据 CommonJS 或者 AMD 规范编写的模块。但是很多时候,当使用第三方 library 的时候,可以看出我们还期望有一些全局依赖,比如对于大家都知道 `jquery``$`这可能也会创建一些需要被导出的全局变量。在此,我们会看到通过不同的方式去帮助 webpack 支持这些**彼此割裂的模块**
1111

12-
## 相对于打包的`dist`版本优先未压缩的CommonJS/AMD文件
12+
## 未压缩的 CommonJS/AMD 文件优先于 `dist` 打包版本
1313

14-
大多数模块在它们的`package.json`中的`main`区链接`dist`版本。尽管这对大多数开发者是有用的,对于webpack最好是链接到源代码版本,因为这样webpack能够更好地优化依赖。然而大多数情况下`dist`也能够运行正常
14+
多数模块会在 `package.json``main` 字段中链接到 library 的 `dist` 版本。虽然对多数开发者来说这是有用的,但对于 webpack 来说更好的方式是链接到 src 版本的别名上,因为这样 webpack 能够更好地优化依赖。然而多数情况下 `dist` 版本也能正常运行
1515

1616
``` javascript
1717
// webpack.config.js
@@ -27,9 +27,8 @@ module.exports = {
2727
```
2828

2929
## `provide-plugin`
30-
[`provide-plugin`](/plugins/provide-plugin)可以让模块作为一个变量被`webpack`在别的模块中引用。只有你需要使用这个变量的时候这个模块才会被引用。
31-
32-
大多数遗留的模块依赖于某些特定的全局变量,比如jQuery plugins对于`$`或者`jQuery`。在这样的情形下,你可以在webpack中预先设置`var $ = require(“jquery”)`在每次遇到全局标识符`$`的时候。
30+
The [`provide-plugin`](/plugins/provide-plugin) 可以将模块作为一个变量,被 `webpack` 在其他每个模块中引用。只有你需要使用此变量的时候,这个模块才会被 require 进来。
31+
多数之前遗留的模块,会依赖于已存在的某些特定全局变量,比如 jQuery 插件中的 `$` 或者 `jQuery`。在这种场景,你可以在每次遇到全局标识符 `$` 的时候,在 webpack 中预先设置 `var $ = require(“jquery”)`
3332

3433
```javascript
3534
module.exports = {
@@ -44,9 +43,8 @@ module.exports = {
4443

4544
## `imports-loader`
4645

47-
[`imports-loader`](/loaders/imports-loader/) 在引入的遗留模块中插入必要的全局变量。
48-
49-
比如,某些遗留模块依赖于作为`window`对象的`this`。当这个模块在CommonJS环境中执行就会产生问题,因为在这个环境中`this`就是`module.exports`。在这种情况下你可以通过使用`imports-loader`来重写`this`
46+
[`imports-loader`](/loaders/imports-loader/) 在引用了之前遗留模块的代码中,插入必需的全局变量。
47+
例如,某些遗留模块依赖于 `this` 作为 `window` 对象,而在 CommonJS 上下文中执行的 `this` 等同于 `module.exports`。在这种情况下,你可以使用 `imports-loader` 来替换重写 `this`
5048

5149
**webpack.config.js**
5250
```javascript
@@ -60,7 +58,7 @@ module.exports = {
6058
};
6159
```
6260

63-
webpack中的模块支持不同的[模块风格](/concepts/modules),比如AMD, CommonJS以及遗留模块。然而,通常它们会首先检查`define`然后使用某种怪异的代码来导出属性。在这些情况下,你可以通过设置`define = false`来强制使用CommonJS路径
61+
webpack 中的模块支持不同的[模块风格](/concepts/modules),比如AMD, CommonJS 以及之前的遗留模块。然而,通常会先检查 `define`然后使用一些比较怪异的代码来导出属性。在这些情况下,可以通过设置 `define = false`,有助于强制使用 CommonJS 路径
6462

6563
**webpack.config.js**
6664
```javascript
@@ -76,7 +74,7 @@ module.exports = {
7674

7775
## `exports-loader`
7876

79-
假设库产生一个全局变量,它就希望它的用户来使用它。在这种情况下,我们可以使用[`exports-loader`](/loaders/exports-loader/)以CommonJS格式来导出全局变量。比如为了将`file`导出成`file`以及将`helpers.parse`导出成`parse`
77+
比如说,一个 library 创建了一个全局变量,它期望使用者通过全局变量去使用。在这种情况下,我们能够使用 [`exports-loader`](/loaders/exports-loader/),将全局变量导出为 CommonJS 格式。比如,为了将 `file` 导出为 `file` 以及将 `helpers.parse` 导出为 `parse`
8078

8179
**webpack.config.js**
8280
```javascript
@@ -85,7 +83,7 @@ module.exports = {
8583
rules: [{
8684
test: require.resolve("some-module"),
8785
use: 'exports-loader?file,parse=helpers.parse'
88-
// 在文件的源头中加入以下代码
86+
// 在文件的源码中加入以下代码
8987
// exports["file"] = file;
9088
// exports["parse"] = helpers.parse;
9189
}]
@@ -95,33 +93,33 @@ module.exports = {
9593

9694
## `script-loader`
9795

98-
[script-loader](/loaders/script-loader/) 在全局环境中执行代码,就像你在`script`标签中加入代码。在这种模式下一般的库都能够运行。require, module等等是未定义的。
9996

100-
W>这个文件是作为字符串加入到打包文件中。它不会被`webpack`压缩,因此使用一个压缩的版本。也没有其他的开发工具可以支持通过这个加载器添加的库
97+
[script-loader](/loaders/script-loader/) 在全局上下文中执行代码,如同你在 `script` 标签中加入代码。在这种模式下普通的 library 都能够正常运行。访问 require, module 等变量则是 undefined
10198

102-
假设你有一个`legacy.js`文件包含...
99+
W> 文件作为字符串添加到 bundle 中。它不会被 `webpack` 压缩,因此如果使用了一个压缩后的版本,没有开发工具支持调试此 loader 添加的 library。
103100

101+
假设你有一个 `legacy.js` 文件包含……
104102
```javascript
105103
GLOBAL_CONFIG = {};
106104
```
107105

108-
...使用`scrupt-loader`...
106+
...使用 `script-loader`...
109107

110108
```javascript
111109
require('script-loader!legacy.js');
112-
```
110+
```
113111

114-
...基本上产生
112+
...基本上会生成
115113

116114
```javascript
117115
eval("GLOBAL_CONFIG = {};");
118116
```
119117

120-
## `noParse` 选项
118+
## `noParse` 选项
121119

122-
当这个模块没有AMD或者CommonJS版本的时候,并且你希望包括`dist`,你可以将这个模块标志成 [`noParse`](/configuration/module/#module-noparse)。然后`webpack`将会直接包括这个模块并且不会解析它,这样可以用于减少构建时间
120+
当模块没有 AMD/CommonJS 的版本时,并且你希望直接引入 `dist` 版本,你可以将这个模块标记为 [`noParse`](/configuration/module/#module-noparse)。然后 `webpack` 将会直接引入这个模块并且不会解析它,这样可以用来改善构建时间
123121

124-
W>任何需要引入AST的特性都不会工作,比如`ProvidePlugin`
122+
W> 任何用到 AST 特性(比如 `ProvidePlugin`)都不会工作
125123

126124
```javascript
127125
module.exports = {
@@ -133,4 +131,4 @@ module.exports = {
133131

134132
***
135133

136-
> 原文:https://webpack.js.org/guides/shimming/
134+
> 原文:https://webpack.js.org/guides/shimming/

0 commit comments

Comments
 (0)