怎样写一个能同时用于Node和浏览器的JavaScript包
2个回答
2018-06-28 · 百度知道合伙人官方认证企业
育知同创教育
1【专注:Python+人工智能|Java大数据|HTML5培训】 2【免费提供名师直播课堂、公开课及视频教程】 3【地址:北京市昌平区三旗百汇物美大卖场2层,微信公众号:yuzhitc】
向TA提问
关注
展开全部
对于浏览器来说,这很简单:我们只需要使用自带的 btoa 函数:
module.exports = function (string) {
return btoa(string);
};
然而在 Node 里并没有 btoa 函数。因此,作为替代,我们需要自己创建一个 Buffer ,然后在上面调用 buffer.toString() :
module.exports = function (string) {
return Buffer.from(string, 'binary').toString('base64');
};
对于一个字符串,这两者都应提供其正确的 base64 编码版本,比如:
var b64encode = require('base64-encode-string');
b64encode('foo'); // Zm9v
b64encode('foobar'); // Zm9vYmFy
现在我们只需要一些方法来检测我们究竟是在浏览器上运行还是在 Node 上,好让我们能保证使用正确的版本。Browserify 和 Webpack 都定义了一个叫 process.browser 的字段,它会返回 true (译者注:即浏览器环境下),然而在 Node 上这个字段返回 false 。所以我们只需要简单地:
if (process.browser) {
module.exports = function (string) {
return btoa(string);
};
} else {
module.exports = function (string) {
return Buffer.from(string, 'binary').toString('base64');
};
}
现在我们只需要把我们的文件命名为 index.js ,键入 npm publish ,我们就完成了,对不对?好的吧,这个方法有效,但不幸的是,这种实现有一个巨大的性能问题。
module.exports = function (string) {
return btoa(string);
};
然而在 Node 里并没有 btoa 函数。因此,作为替代,我们需要自己创建一个 Buffer ,然后在上面调用 buffer.toString() :
module.exports = function (string) {
return Buffer.from(string, 'binary').toString('base64');
};
对于一个字符串,这两者都应提供其正确的 base64 编码版本,比如:
var b64encode = require('base64-encode-string');
b64encode('foo'); // Zm9v
b64encode('foobar'); // Zm9vYmFy
现在我们只需要一些方法来检测我们究竟是在浏览器上运行还是在 Node 上,好让我们能保证使用正确的版本。Browserify 和 Webpack 都定义了一个叫 process.browser 的字段,它会返回 true (译者注:即浏览器环境下),然而在 Node 上这个字段返回 false 。所以我们只需要简单地:
if (process.browser) {
module.exports = function (string) {
return btoa(string);
};
} else {
module.exports = function (string) {
return Buffer.from(string, 'binary').toString('base64');
};
}
现在我们只需要把我们的文件命名为 index.js ,键入 npm publish ,我们就完成了,对不对?好的吧,这个方法有效,但不幸的是,这种实现有一个巨大的性能问题。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询