Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
ÔõÑùдһ¸öÄÜͬʱÓÃÓÚNodeºÍä¯ÀÀÆ÷µÄJavaScript°ü£¿
 
À´Ô´£º¿ªÔ´ÖйúÉçÇø ·¢²¼ÓÚ 2017-3-17
  2113  次浏览      27
 

ÎÒÔÚÕâ¸öÎÊÌâÉϼû¹ýºÜ¶àÀ§»ó£¬¼´Ê¹ÊǺÜÓо­ÑéµÄ JavaScript ¿ª·¢ÕßÒ²¿ÉÄÜÄÑÒÔ°ÑÎÕÆäÖеÄÇÉÃîÖ®´¦¡£Òò´ËÎÒÈÏΪֵµÃΪËüÊéдһС¶Î½Ì³Ì¡£

¼ÙÉèÄãÓÐÒ»¸ö JavaScript µÄÄ£¿éÏëÒª·¢²¼µ½ npm ÉÏ£¬ËüÊÇͬʱÊÊÓÃÓÚ Node ºÍä¯ÀÀÆ÷µÄ¡£µ«ÊÇÇë×¢Ò⣡Õâ¸öÌØÊâµÄÄ£¿éÔÚ Node °æ±¾ºÍä¯ÀÀÆ÷°æ±¾ÉϵÄʵÏÖÓÐ×Åϸ΢µÄÇø±ð¡£

ÕâÖÖÇé¿ö³öÏÖµÃʵÔÚÆµ·±£¬ÒòΪÔÚ Node ºÍä¯ÀÀÆ÷¼äÓÐןܶà΢СµÄ»·¾³²î±ð¡£ÔÚÕâÖÖÇé¿öÏ£¬¿ÉÒÔÓñȽÏÇÉÃîµÄ·½·¨À´ÕýÈ·µØÊµÏÖ£¬ÓÈÆäÊǵ±ÄãÔÚ³¢ÊÔ×ÅʹÓÃ×îСµÄ browser °ü£¨bundle£©À´ÓÅ»¯µÄʱºò¡£

ÈÃÎÒÃǹ¹½¨Ò»¸ö JS °ü

Òò´ËÈÃÎÒÃÇÀ´Ð´Ò»¸öСµÄ JavaScript °ü£¬½Ð×ö base64-encode-string¡£ËüËù×öµÄÖ»ÊǽÓÊÕÒ»¸ö×Ö·û´®×÷ΪÊäÈ룬Êä³öÆä base64 ±àÂëµÄ°æ±¾¡£

¶ÔÓÚä¯ÀÀÆ÷À´Ëµ£¬ÕâºÜ¼òµ¥£ºÎÒÃÇÖ»ÐèҪʹÓÃ×Ô´øµÄ 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£¬ÎÒÃǾÍÍê³ÉÁË£¬¶Ô²»¶Ô£¿ºÃµÄ°É£¬Õâ¸ö·½·¨ÓÐЧ£¬µ«²»ÐÒµÄÊÇ£¬ÕâÖÖʵÏÖÓÐÒ»¸ö¾Þ´óµÄÐÔÄÜÎÊÌâ¡£

ÒòΪÎÒÃÇµÄ index.js Îļþ°üº¬ÁË¶Ô Node ×Ô´øµÄ process ºÍ Buffer Ä£¿éµÄÒýÓã¬Browserify ºÍ Webpack ¶¼»á×Ô¶¯ÒýÈë Æä polyfill£¬À´½«ËüÃÇ´ò°ü½øÕâЩģ¿é¡£

¶ÔÓÚÕâ¸ö¼òµ¥µÄ¾ÅÐÐÄ£¿é£¬ÎÒËãÁËһϣ¬ Browserify ºÍ Webpack »á´´½¨ Ò»¸öѹËõºóÓÐ 24.7KB µÄ°ü (7.6KB min+gz)¡£¶ÔÓÚÕâÖÖ¶«Î÷£¬ÓõôµÄ¿Õ¼äʵÔÚÊÇÌ«¶à£¬ÒòΪÔÚä¯ÀÀÆ÷ÀֻÐèÒª btoa ¾ÍÄܱíʾÕâ¸ö¡£

¡°browser¡± ×ֶΣ¬ÎÒ¸ÃÈçºÎ°®Äã

Èç¹ûÄãÔÚ Browserify »òÕß Webpack ÎĵµÀïÕÒ½â¾öÕâ¸öÎÊÌâµÄÌáʾ£¬Äã¿ÉÄÜ×îºó»á·¢ÏÖ node-browser-resolve¡£ÕâÊÇÒ»¸ö¶ÔÓÚ package.json ÄÚ "browser" ×ֶεĹ淶£¬¿ÉÒÔ±»ÓÃÓÚ¶¨ÒåÔÚä¯ÀÀÆ÷°æ±¾¹¹½¨Ê±ÐèÒª±»»»µôµÄ¶«Î÷¡£

ʹÓÃÕâÖÖ¼¼Êõ£¬ÎÒÃÇ¿ÉÒÔ½«½ÓÏÂÀ´Õâ¶Î¼ÓÈëÎÒÃÇµÄ package.json£º

{ 
/* ... */
"browser": {
"./index.js": "./browser.js"
}
}

È»ºó½«º¯Êý·Ö¸î³ÉÁ½¸ö²»Í¬µÄÎļþ£ºindex.js ºÍ browser.js£º

// index.js 
module.exports = function (string) {
return Buffer.from(string, 'binary').toString('base64');
};

// browser.js
module.exports = function (string) {
return btoa(string);
};

ÓÐÁËÕâ´Î¸Ä½øÒÔºó£¬Browserify ºÍ Webpack »á¸ø³ö ¸ü¼ÓºÏÀíµÄ°ü£ºBrowserify µÄ°üѹËõºóÊÇ 511 ×Ö½Ú£¨315 min+gz)£¬Webpack µÄ°üѹËõºóÊÇ 550 ×Ö½Ú£¨297 min+gz£©¡£

µ±ÎÒÃǽ«ÎÒÃǵİü·¢²¼µ½ npm ʱ£¬ÔÚ Node ÀïÔËÐÐ require('base64-encode-string') µÄÈ˽«µÃµ½ Node °æµÄ´úÂ룬ÔÚ Browserfy ºÍ Webpack ÀïÅܵÄÈË»áµÃµ½ä¯ÀÀÆ÷°æµÄ´úÂë¡£

¶ÔÓÚ Rollup À´Ëµ£¬Õâ¾ÍÓе㸴ÔÓÁË£¬µ«Ò²²»ÐèҪ̫¶à¶îÍâµÄ¹¤×÷¡£Rollup Óû§ÐèҪʹÓà rollup-plugin-node-resolve ²¢ÔÚÑ¡ÏîÀォ browser ÉèÖÃΪ true¡£

¶Ô jspm À´Ëµ£¬ºÜ²»Ðҵأ¬Ã»ÓÐ¶Ô ¡°browser¡± ×ֶεÄÖ§³Ö£¬µ«ÊÇ jspm Óû§¿ÉÒÔͨ¹ý require('base64-encode-string/browser') »òÕß jspm install npm:base64-encode-string -o "{main:'browser.js'}" À´Óػصؽâ¾öÎÊÌâ¡£ÁíÒ»ÖÖ·½·¨ÊÇ£¬°üµÄ×÷Õß¿ÉÒÔÔÚËûÃÇµÄ package.json Àï Ö¸¶¨Ò»¸ö ¡°jspm¡± ×ֶΡ£

½ø½×¼¼ÇÉ

ÕâÖÖÖ±½ÓʹÓÃµÄ "browser" ·½·¨¿ÉÒÔ¹¤×÷µÃºÜºÃ£¬µ«ÊǶÔÓÚ´óÐÍÏîÄ¿À´Ëµ£¬ÎÒ·¢ÏÖËüÔÚ package.json ºÍ´úÂë¿â¼äÒýÈëÁËÒ»ÖÖÞÏÞεÄñîºÏ¡£±ÈÈç˵£¬ÎÒÃÇµÄ package.json »áºÜ¿ì³¤³ÉÕâÑù£º

{ 
/* ... */
"browser": {
"./index.js": "./browser.js",
"./widget.js": "./widget-browser.js",
"./doodad.js": "./doodad-browser.js",
/* etc. */
}
}

ÔÚÕâÖÖÇé¿öÏ£¬ÈκÎʱºòÄãÏëÒªÒ»¸öÊÊÅäÓÚä¯ÀÀÆ÷µÄÄ£¿é£¬¶¼ÐèÒª·Ö±ð´´½¨Á½¸öÎļþ£¬²¢ÇÒÒª¼ÇסÔÚ "browser" ×Ö¶ÎÉÏÌí¼Ó¶îÍâÐÐÀ´½«ËüÃÇÁ¬½ÓÆðÀ´¡£»¹Òª×¢Òâ²»ÄÜÆ´´íÈκζ«Î÷£¡

²¢ÇÒ£¬Äã»á·¢ÏÖÄãÔڷѾ¡ÐÄ»úµØ½«Î¢Ð¡µÄ´úÂëÌáÈ¡µ½·ÖÀëµÄÄ£¿éÀ½ö½öÊÇÒòΪÄãÏëÒª±ÜÃâ if (process.browser) {} ¼ì²é¡£µ±ÕâЩ *-browser.js Îļþ»ýÀÛÆðÀ´µÄʱºò£¬ËüÃǻῪʼÈôúÂë¿â±äµÃºÜÄÑÌø×ª¡£

Èç¹ûÕâÖÖÇé¿ö±äµÃʵÔÚÌ«±¿ÖØÁË£¬ÓÐһЩ±ðµÄ½â¾ö·½°¸¡£ÎÒ×Ô¼ºµÄÆ«ºÃÊÇʹÓà Rollup ×÷Ϊ¹¹½¨¹¤¾ß£¬À´×Ô¶¯µØ½«µ¥¸ö´úÂë¿â·Ö¸îµ½²»Í¬µÄ index.js ºÍ browser.js ÎļþÀï¡£Õâ¶ÔÓÚ½«ÄãÌṩ¸øÓû§µÄ´úÂëµÄ½âÄ£¿é»¯ÓжîÍâµÄ¼ÛÖµ£¬½ÚÊ¡Á˿ռäºÍʱ¼ä¡£

ÒªÕâÑù×öµÄ»°£¬ÏȰ²×° rollup ºÍ rollup-plugin-replace£¬È»ºó¶¨ÒåÒ»¸ö rollup.config.js Îļþ£º

import replace from 'rollup-plugin-replace'; 
export default {
entry: 'src/index.js',
format: 'cjs',
plugins: [
replace({ 'process.browser': !!process.env.BROWSER })
]
};

£¨ÎÒÃǽ«Ê¹Óà process.env.BROWSER ×÷ΪһÖÖ·½±ãµØÔÚä¯ÀÀÆ÷¹¹½¨ºÍ Node ¹¹½¨¼äÇл»µÄ·½Ê½¡££©

½ÓÏÂÀ´£¬ÎÒÃÇ¿ÉÒÔ´´½¨Ò»¸ö´øÓе¥¸öº¯ÊýµÄ src/index.js Îļþ£¬Ê¹ÓÃÆÕͨµÄ process.browser Ìõ¼þ£º

export default function base64Encode(string) { 
if (process.browser) {
return btoa(string);
} else {
return Buffer.from(string, 'binary').toString('base64');
}
}

È»ºó½« prepublish ²½ÖèÌí¼Óµ½ package.json ÄÚ£¬À´Éú³ÉÎļþ£º

{ 
/* ... */
"scripts": {
"prepublish": "rollup -c > index.js && BROWSER=true rollup -c >
browser.js"
}
}

Éú³ÉµÄÎļþ¶¼Ï൱ֱ°×Ò×¶Á£º

// index.js 
'use strict';

function base64Encode(string) {
{
return Buffer.from(string, 'binary').toString('base64');
}
}

module.exports = base64Encode;

// browser.js
'use strict';

function base64Encode(string) {
{
return btoa(string);
}
}

module.exports = base64Encode;

Ä㽫עÒâµ½£¬Rollup »á°´Ðè×Ô¶¯µØ½« process.browser ת»»³É true »òÕß false£¬È»ºóÈ¥µôÄÇЩÎÞÓôúÂë¡£ËùÒÔÔÚÉú³ÉµÄä¯ÀÀÆ÷°üÀï²»»áÓжÔÓÚ process »òÕß Buffer µÄÒýÓá£

ʹÓÃÕâ¸ö¼¼ÇÉ£¬ÔÚÄãµÄ´úÂë¿âÀï¿ÉÒÔÓÐÈÎÒâ¸öµÄ process.browser Çл»£¬²¢ÇÒ·¢²¼µÄ½á¹ûÊÇÁ½¸öСµÄ¼¯ÖÐµÄ index.js ºÍ browser.js Îļþ£¬ÆäÖжÔÓÚ Node Ö»ÓÐ Node Ïà¹ØµÄ´úÂ룬¶ÔÓÚä¯ÀÀÆ÷Ö»ÓÐä¯ÀÀÆ÷Ïà¹ØµÄ´úÂë¡£

×÷Ϊ¸½´øµÄ¸£Àû£¬Äã¿ÉÒÔÅäÖà Rollup À´Éú³É ES Ä£¿é¹¹½¨£¬IIFE ¹¹½¨£¬»òÕß UMD ¹¹½¨¡£Èç¹ûÄãÏëҪʾÀýµÄ»°£¬¿ÉÒԲ鿴ÎÒµÄÏîÄ¿ marky£¬ÕâÊÇÒ»¸öÓµÓжà¸ö Rollup ¹¹½¨Ä¿±êµÄ¼òµ¥¿â¡£

ÔÚÕâÆªÎÄÕÂÀïÃèÊöµÄʵ¼ÊÏîÄ¿£¨base64-encode-string£©Ò²Í¬Ñù±» ·¢²¼µ½ npm ÉÏ £¬Äã¿ÉÒÔÉóÊÓËü£¬¿´¿´ËüÊÇÔõô×öµ½µÄ¡£Ô´Âë ÔÚ GitHub ÉÏ¡£

   
2113 ´Îä¯ÀÀ       27
Ïà¹ØÎÄÕ Ïà¹ØÎĵµ Ïà¹Ø¿Î³Ì



Éî¶È½âÎö£ºÇåÀíÀôúÂë
ÈçºÎ±àд³öÓµ±§±ä»¯µÄ´úÂë
ÖØ¹¹-ʹ´úÂë¸ü¼ò½àÓÅÃÀ
ÍŶÓÏîÄ¿¿ª·¢"±àÂë¹æ·¶"ϵÁÐÎÄÕÂ
ÖØ¹¹-¸ÄÉÆ¼ÈÓдúÂëµÄÉè¼Æ
Èí¼þÖØ¹¹v2
´úÂëÕû½àÖ®µÀ
¸ßÖÊÁ¿±à³Ì¹æ·¶
»ùÓÚHTML5¿Í»§¶Ë¡¢Web¶ËµÄÓ¦Óÿª·¢
HTML 5+CSS ¿ª·¢
ǶÈëʽC¸ßÖÊÁ¿±à³Ì
C++¸ß¼¶±à³Ì
×îл¼Æ»®
DeepSeekÔÚÈí¼þ²âÊÔÓ¦ÓÃʵ¼ù 4-12[ÔÚÏß]
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢Êµ¼ù 4-19[ÔÚÏß]
UAF¼Ü¹¹ÌåϵÓëʵ¼ù 4-11[±±¾©]
AIÖÇÄÜ»¯Èí¼þ²âÊÔ·½·¨Óëʵ¼ù 5-23[ÉϺ£]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 4-26[±±¾©]
ÒµÎñ¼Ü¹¹Éè¼ÆÓ뽨ģ 4-18[±±¾©]

AndroidÊÖ»ú¿ª·¢£¨Ò»£©
Àí½âJavascript
·ÇµäÐÍajaxʵ¼ù
³¹µ×µÄAjax
javascript ʹÓÃCookies
ʹÓà jQuery ¼ò»¯ Ajax ¿ª·¢

Struts+Spring+Hibernate
»ùÓÚJ2EEµÄWeb 2.0Ó¦Óÿª·¢
J2EEÉè¼ÆÄ£Ê½ºÍÐÔÄܵ÷ÓÅ
Java EE 5ÆóÒµ¼¶¼Ü¹¹Éè¼Æ
Javaµ¥Ôª²âÊÔ·½·¨Óë¼¼Êõ
Java±à³Ì·½·¨Óë¼¼Êõ

ijº½¿Õ¹«Ë¾IT²¿ JavaScriptʵ¼ù
ijµçÊÓÈí¼þ HTML5ºÍJavaScript
Öк½ÐÅ JavaScript¸ß¼¶Ó¦Óÿª·¢
´óÇìÓÍÌï web½çÃæAjax¿ª·¢¼¼Êõ
ºÍÀûʱ ʹÓÃAJAX½øÐÐWEBÓ¦Óÿª·¢