如何在 window 环境中获取 JavaScript UMD 包的完整字符串? `.toString()` 不工作
How can I get full string of my JavaScript UMD package in window environment? `.toString()` is not working
我有一个名为 utils
的 UMD 包,它只有一个名为 sum
的方法,如下所示:
<script src="path/to/my/utils-umd.js"></script>
<script>
console.log(utils.sum([1,2,3]));
// => 6
</script>
现在,我想获取我的 UMD 源代码的完整字符串,由于某些原因我不能简单地 fetch('path/to/my/utils-umd.js')
,所以我需要同步获取我的 UMD 包字符串。
我尝试了几种方法,但都不成功,以下是其中一些:
window.utils.toString();
// => "[object Module]"
Object.prototype.toString.call(window.utils);
// => "[object Module]"
typeof window.utils;
// => "object"
JSON.stringify(window.utils)
// => "{}"
这是我的完整 UMD 包源代码:
(function(e, t) {
'object' === typeof exports && 'object' === typeof module
? (module.exports = t())
: 'function' === typeof define && define.amd
? define([], t)
: 'object' === typeof exports
? (exports['utils'] = t())
: (e['utils'] = t());
})('undefined' !== typeof self ? self : this, function() {
return (function(e) {
var t = {};
function n(r) {
if (t[r]) return t[r].exports;
var o = (t[r] = { i: r, l: !1, exports: {} });
return e[r].call(o.exports, o, o.exports, n), (o.l = !0), o.exports;
}
return (
(n.m = e),
(n.c = t),
(n.d = function(e, t, r) {
n.o(e, t) || Object.defineProperty(e, t, { enumerable: !0, get: r });
}),
(n.r = function(e) {
'undefined' !== typeof Symbol &&
Symbol.toStringTag &&
Object.defineProperty(e, Symbol.toStringTag, { value: 'Module' }),
Object.defineProperty(e, '__esModule', { value: !0 });
}),
(n.t = function(e, t) {
if ((1 & t && (e = n(e)), 8 & t)) return e;
if (4 & t && 'object' === typeof e && e && e.__esModule) return e;
var r = Object.create(null);
if (
(n.r(r),
Object.defineProperty(r, 'default', { enumerable: !0, value: e }),
2 & t && 'string' != typeof e)
)
for (var o in e)
n.d(
r,
o,
function(t) {
return e[t];
}.bind(null, o)
);
return r;
}),
(n.n = function(e) {
var t =
e && e.__esModule
? function() {
return e['default'];
}
: function() {
return e;
};
return n.d(t, 'a', t), t;
}),
(n.o = function(e, t) {
return Object.prototype.hasOwnProperty.call(e, t);
}),
(n.p = ''),
n((n.s = 'fae3'))
);
})({
f6fd: function(e, t) {
(function(e) {
var t = 'currentScript',
n = e.getElementsByTagName('script');
t in e ||
Object.defineProperty(e, t, {
get: function() {
try {
throw new Error();
} catch (r) {
var e,
t = (/.*at [^\(]*\((.*):.+:.+\)$/gi.exec(r.stack) || [!1])[1];
for (e in n)
if (n[e].src == t || 'interactive' == n[e].readyState)
return n[e];
return null;
}
}
});
})(document);
},
fae3: function(e, t, n) {
'use strict';
var r;
(n.r(t), 'undefined' !== typeof window) &&
(n('f6fd'),
(r = window.document.currentScript) &&
(r = r.src.match(/(.+\/)[^/]+\.js(\?.*)?$/)) &&
(n.p = r[1]));
function o(e) {
return e.reduce(function(e, t) {
return e + t;
}, 0);
}
n.d(t, 'sum', function() {
return o;
});
}
});
});
//# sourceMappingURL=utils.umd.min.js.map
可以这样做吗?
您只能使用 toString
方法获取函数的源代码,您可以尝试将所有 UMD 捆绑到具有名称的函数中 运行 然后您将能够获得使用 toString
的源代码 例如:
function foo() {
console.log('foo')
return true;
}
document.getElementById('res').innerText = foo.toString();
<div id="res">
aaaaaaaaaa
</div>
我使用 XMLHttpRequest 将 JS 文件转换为字符串希望对您有所帮助。
<script src="utils-umd.js"></script>
<script>
var client = new XMLHttpRequest();
client.open('GET', 'utils-umd.js');
client.onreadystatechange = function() {
console.log(client.responseText);
}
client.send();
</script>
I can't simply fetch('path/to/my/utils-umd.js') for some reason
如果您可以通过 <script src='?'>
加载脚本,那么我看不出 fetch 无法工作的原因。
下面是一个使用 fetch..
将 jquery 加载到文本区域的示例
const jqueryurl = 'https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js';
async function getjquerySrc() {
document.querySelector('textarea').value =
await(await fetch(jqueryurl)).text();
}
getjquerySrc();
textarea {
width: 100%;
}
<textarea rows=10>
</textarea>
我有一个名为 utils
的 UMD 包,它只有一个名为 sum
的方法,如下所示:
<script src="path/to/my/utils-umd.js"></script>
<script>
console.log(utils.sum([1,2,3]));
// => 6
</script>
现在,我想获取我的 UMD 源代码的完整字符串,由于某些原因我不能简单地 fetch('path/to/my/utils-umd.js')
,所以我需要同步获取我的 UMD 包字符串。
我尝试了几种方法,但都不成功,以下是其中一些:
window.utils.toString();
// => "[object Module]"
Object.prototype.toString.call(window.utils);
// => "[object Module]"
typeof window.utils;
// => "object"
JSON.stringify(window.utils)
// => "{}"
这是我的完整 UMD 包源代码:
(function(e, t) {
'object' === typeof exports && 'object' === typeof module
? (module.exports = t())
: 'function' === typeof define && define.amd
? define([], t)
: 'object' === typeof exports
? (exports['utils'] = t())
: (e['utils'] = t());
})('undefined' !== typeof self ? self : this, function() {
return (function(e) {
var t = {};
function n(r) {
if (t[r]) return t[r].exports;
var o = (t[r] = { i: r, l: !1, exports: {} });
return e[r].call(o.exports, o, o.exports, n), (o.l = !0), o.exports;
}
return (
(n.m = e),
(n.c = t),
(n.d = function(e, t, r) {
n.o(e, t) || Object.defineProperty(e, t, { enumerable: !0, get: r });
}),
(n.r = function(e) {
'undefined' !== typeof Symbol &&
Symbol.toStringTag &&
Object.defineProperty(e, Symbol.toStringTag, { value: 'Module' }),
Object.defineProperty(e, '__esModule', { value: !0 });
}),
(n.t = function(e, t) {
if ((1 & t && (e = n(e)), 8 & t)) return e;
if (4 & t && 'object' === typeof e && e && e.__esModule) return e;
var r = Object.create(null);
if (
(n.r(r),
Object.defineProperty(r, 'default', { enumerable: !0, value: e }),
2 & t && 'string' != typeof e)
)
for (var o in e)
n.d(
r,
o,
function(t) {
return e[t];
}.bind(null, o)
);
return r;
}),
(n.n = function(e) {
var t =
e && e.__esModule
? function() {
return e['default'];
}
: function() {
return e;
};
return n.d(t, 'a', t), t;
}),
(n.o = function(e, t) {
return Object.prototype.hasOwnProperty.call(e, t);
}),
(n.p = ''),
n((n.s = 'fae3'))
);
})({
f6fd: function(e, t) {
(function(e) {
var t = 'currentScript',
n = e.getElementsByTagName('script');
t in e ||
Object.defineProperty(e, t, {
get: function() {
try {
throw new Error();
} catch (r) {
var e,
t = (/.*at [^\(]*\((.*):.+:.+\)$/gi.exec(r.stack) || [!1])[1];
for (e in n)
if (n[e].src == t || 'interactive' == n[e].readyState)
return n[e];
return null;
}
}
});
})(document);
},
fae3: function(e, t, n) {
'use strict';
var r;
(n.r(t), 'undefined' !== typeof window) &&
(n('f6fd'),
(r = window.document.currentScript) &&
(r = r.src.match(/(.+\/)[^/]+\.js(\?.*)?$/)) &&
(n.p = r[1]));
function o(e) {
return e.reduce(function(e, t) {
return e + t;
}, 0);
}
n.d(t, 'sum', function() {
return o;
});
}
});
});
//# sourceMappingURL=utils.umd.min.js.map
可以这样做吗?
您只能使用 toString
方法获取函数的源代码,您可以尝试将所有 UMD 捆绑到具有名称的函数中 运行 然后您将能够获得使用 toString
的源代码 例如:
function foo() {
console.log('foo')
return true;
}
document.getElementById('res').innerText = foo.toString();
<div id="res">
aaaaaaaaaa
</div>
我使用 XMLHttpRequest 将 JS 文件转换为字符串希望对您有所帮助。
<script src="utils-umd.js"></script>
<script>
var client = new XMLHttpRequest();
client.open('GET', 'utils-umd.js');
client.onreadystatechange = function() {
console.log(client.responseText);
}
client.send();
</script>
I can't simply fetch('path/to/my/utils-umd.js') for some reason
如果您可以通过 <script src='?'>
加载脚本,那么我看不出 fetch 无法工作的原因。
下面是一个使用 fetch..
将 jquery 加载到文本区域的示例const jqueryurl = 'https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js';
async function getjquerySrc() {
document.querySelector('textarea').value =
await(await fetch(jqueryurl)).text();
}
getjquerySrc();
textarea {
width: 100%;
}
<textarea rows=10>
</textarea>