@@ -7,11 +7,11 @@ contributors:
7
7
- simon04
8
8
---
9
9
10
- ` webpack ` 作为模块打包工具可以支持使用ES2015模块,CommonJS或者AMD编写的模块 。但是很多时候,当使用第三方的库的时候,我们可以看出还需要一些依赖比如对于 ` jqueray ` 的全局别名 ` $ ` 。它们也可能产生其它需要被导出的全局变量 。在此,我们一起来看一下帮助webpack理解这些 ** 不完整的模块 ** 的方式 。
10
+ ` webpack ` 作为模块打包工具可以支持 ES2015 模块,根据 CommonJS 或者 AMD 规范编写的模块 。但是很多时候,当使用第三方 library 的时候,可以看出我们还期望有一些全局依赖,比如对于大家都知道 ` jquery ` 的 ` $ ` 。这可能也会创建一些需要被导出的全局变量 。在此,我们会看到通过不同的方式去帮助 webpack 支持这些 ** 彼此割裂的模块 ** 。
11
11
12
- ## 相对于打包的 ` dist ` 版本优先未压缩的CommonJS/AMD文件 。
12
+ ## 未压缩的 CommonJS/AMD 文件优先于 ` dist ` 打包版本 。
13
13
14
- 大多数模块在它们的 ` package.json ` 中的 ` main ` 区链接 ` dist ` 版本。尽管这对大多数开发者是有用的,对于webpack最好是链接到源代码版本,因为这样webpack能够更好地优化依赖。然而大多数情况下 ` dist ` 也能够运行正常 。
14
+ 多数模块会在 ` package.json ` 的 ` main ` 字段中链接到 library 的 ` dist ` 版本。虽然对多数开发者来说这是有用的,但对于 webpack 来说更好的方式是链接到 src 版本的别名上,因为这样 webpack 能够更好地优化依赖。然而多数情况下 ` dist ` 版本也能正常运行 。
15
15
16
16
``` javascript
17
17
// webpack.config.js
@@ -27,9 +27,8 @@ module.exports = {
27
27
```
28
28
29
29
## ` 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”) ` 。
33
32
34
33
``` javascript
35
34
module .exports = {
@@ -44,9 +43,8 @@ module.exports = {
44
43
45
44
## ` imports-loader `
46
45
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 ` 。
50
48
51
49
** webpack.config.js**
52
50
``` javascript
@@ -60,7 +58,7 @@ module.exports = {
60
58
};
61
59
```
62
60
63
- webpack中的模块支持不同的 [ 模块风格] ( /concepts/modules ) ,比如AMD, CommonJS以及遗留模块 。然而,通常它们会首先检查 ` define ` ,然后使用某种怪异的代码来导出属性 。在这些情况下,你可以通过设置 ` define = false ` 来强制使用CommonJS路径 :
61
+ webpack 中的模块支持不同的 [ 模块风格] ( /concepts/modules ) ,比如AMD, CommonJS 以及之前的遗留模块 。然而,通常会先检查 ` define ` ,然后使用一些比较怪异的代码来导出属性 。在这些情况下,可以通过设置 ` define = false ` ,有助于强制使用 CommonJS 路径 :
64
62
65
63
** webpack.config.js**
66
64
``` javascript
@@ -76,7 +74,7 @@ module.exports = {
76
74
77
75
## ` exports-loader `
78
76
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 ` :
80
78
81
79
** webpack.config.js**
82
80
``` javascript
@@ -85,7 +83,7 @@ module.exports = {
85
83
rules: [{
86
84
test: require .resolve (" some-module" ),
87
85
use: ' exports-loader?file,parse=helpers.parse'
88
- // 在文件的源头中加入以下代码
86
+ // 在文件的源码中加入以下代码
89
87
// exports["file"] = file;
90
88
// exports["parse"] = helpers.parse;
91
89
}]
@@ -95,33 +93,33 @@ module.exports = {
95
93
96
94
## ` script-loader `
97
95
98
- [ script-loader] ( /loaders/script-loader/ ) 在全局环境中执行代码,就像你在` script ` 标签中加入代码。在这种模式下一般的库都能够运行。require, module等等是未定义的。
99
96
100
- W>这个文件是作为字符串加入到打包文件中。它不会被 ` webpack ` 压缩,因此使用一个压缩的版本。也没有其他的开发工具可以支持通过这个加载器添加的库 。
97
+ [ script-loader ] ( /loaders/script-loader/ ) 在全局上下文中执行代码,如同你在 ` script ` 标签中加入代码。在这种模式下普通的 library 都能够正常运行。访问 require, module 等变量则是 undefined 。
101
98
102
- 假设你有一个 ` legacy.js ` 文件包含...
99
+ W> 文件作为字符串添加到 bundle 中。它不会被 ` webpack ` 压缩,因此如果使用了一个压缩后的版本,没有开发工具支持调试此 loader 添加的 library。
103
100
101
+ 假设你有一个 ` legacy.js ` 文件包含……
104
102
``` javascript
105
103
GLOBAL_CONFIG = {};
106
104
```
107
105
108
- ...使用` scrupt -loader` ...
106
+ ...使用 ` script -loader` ...
109
107
110
108
``` javascript
111
109
require (' script-loader!legacy.js' );
112
- ```
110
+ ```
113
111
114
- ...基本上产生 :
112
+ ...基本上会生成 :
115
113
116
114
``` javascript
117
115
eval (" GLOBAL_CONFIG = {};" );
118
116
```
119
117
120
- ## ` noParse ` 选项
118
+ ## ` noParse ` 选项
121
119
122
- 当这个模块没有AMD或者CommonJS版本的时候,并且你希望包括 ` dist ` ,你可以将这个模块标志成 [ ` noParse ` ] ( /configuration/module/#module-noparse ) 。然后` webpack ` 将会直接包括这个模块并且不会解析它,这样可以用于减少构建时间 。
120
+ 当模块没有 AMD/CommonJS 的版本时,并且你希望直接引入 ` dist ` 版本,你可以将这个模块标记为 [ ` noParse ` ] ( /configuration/module/#module-noparse ) 。然后 ` webpack ` 将会直接引入这个模块并且不会解析它,这样可以用来改善构建时间 。
123
121
124
- W>任何需要引入AST的特性都不会工作,比如 ` ProvidePlugin ` 。
122
+ W> 任何用到 AST 特性(比如 ` ProvidePlugin ` )都不会工作 。
125
123
126
124
``` javascript
127
125
module .exports = {
@@ -133,4 +131,4 @@ module.exports = {
133
131
134
132
***
135
133
136
- > 原文:https://webpack.js.org/guides/shimming/
134
+ > 原文:https://webpack.js.org/guides/shimming/
0 commit comments