W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
expose-loader
? 允許暴露一個模塊(整體或者部分)給全局對象(?self
?、?window
? 和 ?global
?)。
想要獲取有關(guān)兼容性的進一步提示,請查看官方文檔中的 Shimming。
首先,你需要安裝 ?expose-loader
?:
$ npm install expose-loader --save-dev
(如果你在使用 webpack4,請安裝 ?expose-loader@1
? 并按照 相應(yīng)說明 進行配置。)
然后你可以用兩種方法來用 ?expose-loader
?。
可以使用 | 或者 %20(空格)分隔 expose 中的 globalName、moduleLocalName 和 override。
? %20 是查詢字符串中的空格,因為你不能在 URL 中使用空格
import $ from "expose-loader?exposes=$,jQuery!jquery";
//
// 將 `jquery` 添加到全局對象中,其名稱為 `$` 和 `jQuery`
import { concat } from "expose-loader?exposes=_.concat!lodash/concat";
//
// 將 `lodash/concat` 添加到全局對象中,其名稱為 `_.concat`
import {
map,
reduce,
} from "expose-loader?exposes=_.map|map,_.reduce|reduce!underscore";
//
// 將 `underscore` 中的 `map` 和 `reduce` 方法分別添加到全局對象中,其名稱為 `_.map` 和 `_.reduce`
src/index.js
import $ from "jquery";
webpack.config.js
module.exports = {
module: {
rules: [
{
test: require.resolve("jquery"),
loader: "expose-loader",
options: {
exposes: ["$", "jQuery"],
},
},
{
test: require.resolve("underscore"),
loader: "expose-loader",
options: {
exposes: [
"_.map|map",
{
globalName: "_.reduce",
moduleLocalName: "reduce",
},
{
globalName: ["_", "filter"],
moduleLocalName: "filter",
},
],
},
},
],
},
};
require.resolve 調(diào)用是一個 Node.js 函數(shù)(和 webpack 進程中的 require.resolve 無關(guān))。 require.resolve 給出模塊的絕對路徑 ("/.../app/node_modules/jquery/dist/jquery.js")。 所以 expose 只應(yīng)用于 jquery 模塊。并且只會在 bundle 中使用時才會被暴露。
然后用你喜歡的方式運行 webpack。
Name | Type | Default | Description |
---|---|---|---|
exposes
|
{String|Object|Array<String|Object>}
|
undefined
|
List of exposes |
類型:?String|Object|Array<String|Object>
? 默認值:undefined
List of exposes.
允許用一個 ?string
? 來描述 expose。
可以使用 | 或者 %20(空格)分隔 expose 中的 globalName、moduleLocalName 和 override。
字符串語法 - [[globalName] [moduleLocalName] [override]] 或者 [[globalName]|[moduleLocalName]|[override]],含義如下:
globalName
? - 全局對象的名稱,比如 window.$ 用于瀏覽器環(huán)境(必填項)moduleLocalName
? - 模塊的方法/變量/等的名稱(該模塊必須導(dǎo)出它)(可以省略)override
? - 允許覆蓋在全局對象中存在的值(可以省略)如果 moduleLocalName 沒有指定,它將整個模塊暴露給全局對象,否則它只暴露 moduleLocalName 的值。
src/index.js
import _ from "underscore";
webpack.config.js
module.exports = {
module: {
rules: [
{
test: require.resolve("jquery"),
loader: "expose-loader",
options: {
// 對于 `underscore`,它可以是 `_.map map` 或者 `_.map|map`
exposes: "jquery",
},
},
],
},
};
允許用一個對象來描述 expose。
類型:?String|Array<String>
? 默認值:undefined
全局對象中的名字。(必填項)。
src/index.js
import _ from "underscore";
webpack.config.js
module.exports = {
module: {
rules: [
{
test: require.resolve("underscore"),
loader: "expose-loader",
options: {
exposes: {
// 可以是 `['_', 'filter']`
globalName: "_.filter",
moduleLocalName: "filter",
},
},
},
],
},
};
類型:?String
? 默認值:undefined
模塊中的方法/變量/等的名稱(該模塊必須導(dǎo)出它)。 如果指定了 moduleLocalName,它只暴露 moduleLocalName 的值。
src/index.js
import _ from "underscore";
webpack.config.js
module.exports = {
module: {
rules: [
{
test: require.resolve("underscore"),
loader: "expose-loader",
options: {
exposes: {
globalName: "_.filter",
moduleLocalName: "filter",
},
},
},
],
},
};
類型:?Boolean
? 默認值:false
默認情況下,loader 不會覆蓋全局對象中的現(xiàn)有值,因為它是不安全的。 在 development 模式下,如果值已經(jīng)出現(xiàn)在全局對象中則拋出一個錯誤。 但是你可以使用此選項配置 loader 以覆蓋全局對象中的現(xiàn)有值。
為了強制覆蓋已經(jīng)存在在全局對象中的現(xiàn)有值,你可以設(shè)置 override 選項值為 true。
src/index.js
import $ from "jquery";
webpack.config.js
module.exports = {
module: {
rules: [
{
test: require.resolve("jquery"),
loader: "expose-loader",
options: {
exposes: {
globalName: "$",
override: true,
},
},
},
],
},
};
src/index.js
import _ from "underscore";
webpack.config.js
module.exports = {
module: {
rules: [
{
test: require.resolve("underscore"),
loader: "expose-loader",
options: {
exposes: [
"_.map map",
{
globalName: "_.filter",
moduleLocalName: "filter",
},
{
globalName: ["_", "find"],
moduleLocalName: "myNameForFind",
},
],
},
},
],
},
};
它將 只 暴露 map、filter 和 find 方法(名稱為 myNameForFind) 給全局對象。
在瀏覽器中,這些方法可以在 windows._.map(..args)、windows._.filter(...args) 和 windows._.myNameForFind(...args) 下使用。
如果你還沒有閱讀,請花一點時間閱讀我們的貢獻指南。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: