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

1Ôª 10Ôª 50Ôª





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



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
ÉîÈëdz³öReact£¨¶þ£©£ºReact¿ª·¢ÉñÆ÷Webpack
 
×÷ÕߣºÍõÅæ À´Ô´£ºInfoQ ·¢²¼ÓÚ 2015-11-18
  3888  次浏览      27
 

ÉÏһƪÎÒÃǶÔReactÓÐÁËÒ»¸ö×ÜÌåµÄÈÏʶ£¬ÔÚ½éÉÜÆäÖеļ¼Êõϸ½Ú֮ǰ£¬ÎÒÃÇÊ×ÏÈÀ´Á˽âÒ»ÏÂÓÃÓÚReact¿ª·¢ºÍÄ£¿é¹ÜÀíµÄÖ÷Á÷¹¤¾ßWebpack¡£³ÆÖ®ÎªReact¿ª·¢ÉñÆ÷Óеã±êÌâµ³ÁË£¬²»¹ýWebpackȷʵÊDZÊÕß¼û¹ýµÄ¹¦ÄÜ×îΪǿ´óµÄǰ¶ËÄ£¿é¹ÜÀíºÍ´ò°ü¹¤¾ß¡£ËäÈ»WebpackÊÇÒ»¸öͨÓõŤ¾ß£¬²¢²»Ö»ÊʺÏÓÚReact£¬µ«ÊǺܶàReactµÄÎÄÕ»òÕßÏîÄ¿¶¼Ê¹ÓÃÁËWebpack£¬ÓÈÆäÊÇreact-hot-loaderÕâÑùµÄÉñÆ÷´æÔÚ£¬ÈÃWebpack³ÉΪ×îÖ÷Á÷µÄReact¿ª·¢¹¤¾ß¡£

CommonJSºÍAMDÊÇÓÃÓÚJavaScriptÄ£¿é¹ÜÀíµÄÁ½´ó¹æ·¶£¬Ç°Õß¶¨ÒåµÄÊÇÄ£¿éµÄͬ²½¼ÓÔØ£¬Ö÷ÒªÓÃÓÚNodeJS£»¶øºóÕßÔòÊÇÒì²½¼ÓÔØ£¬Í¨¹ýrequirejsµÈ¹¤¾ßÊÊÓÃÓÚǰ¶Ë¡£Ëæ×Ånpm³ÉΪÖ÷Á÷µÄJavaScript×é¼þ·¢²¼Æ½Ì¨£¬Ô½À´Ô½¶àµÄǰ¶ËÏîĿҲÒÀÀµÓÚnpmÉϵÄÏîÄ¿£¬»òÕß×ÔÉí¾Í»á·¢²¼µ½npmƽ̨¡£Òò´Ë£¬ÈÃǰ¶ËÏîÄ¿¸ü·½±ãµÄʹÓÃnpmÉϵÄ×ÊÔ´³ÉΪһ´óÐèÇó¡£ÓÚÊǵ®ÉúÁËÀàËÆbrowserifyÕâÑùµÄ¹¤¾ß£¬´úÂëÖпÉÒÔʹÓÃrequireº¯ÊýÖ±½ÓÒÔͬ²½Óï·¨ÐÎʽÒýÈënpmÄ£¿é£¬´ò°üºóÔÙÓÉä¯ÀÀÆ÷Ö´ÐС£

WebpackÆäʵÓеãÀàËÆbrowserify£¬³ö×ÔFacebookµÄInstagramÍŶӣ¬µ«¹¦ÄܱÈbrowserify¸üΪǿ´ó¡£ÆäÖ÷ÒªÌØÐÔÈçÏ£º

ͬʱ֧³ÖCommonJSºÍAMDÄ£¿é£¨¶ÔÓÚÐÂÏîÄ¿£¬ÍƼöÖ±½ÓʹÓÃCommonJS£©£»

´®ÁªÊ½Ä£¿é¼ÓÔØÆ÷ÒÔ¼°²å¼þ»úÖÆ£¬ÈÃÆä¾ßÓиüºÃµÄÁé»îÐÔºÍÀ©Õ¹ÐÔ£¬ÀýÈçÌṩ¶ÔCoffeeScript¡¢ES6µÄÖ§³Ö£»

¿ÉÒÔ»ùÓÚÅäÖûòÕßÖÇÄÜ·ÖÎö´ò°ü³É¶à¸öÎļþ£¬ÊµÏÖ¹«¹²Ä£¿é»òÕß°´Ðè¼ÓÔØ£»

Ö§³Ö¶ÔCSS£¬Í¼Æ¬µÈ×ÊÔ´½øÐдò°ü£¬´Ó¶øÎÞÐè½èÖúGrunt»òGulp£»

¿ª·¢Ê±ÔÚÄÚ´æÖÐÍê³É´ò°ü£¬ÐÔÄܸü¿ì£¬ÍêÈ«¿ÉÒÔÖ§³Ö¿ª·¢¹ý³ÌµÄʵʱ´ò°üÐèÇó£»

¶ÔsourcemapÓкܺõÄÖ§³Ö£¬Ò×ÓÚµ÷ÊÔ¡£

Webpack½«ÏîÄ¿ÖÐÓõ½µÄÒ»Çо²Ì¬×ÊÔ´¶¼ÊÓ֮Ϊģ¿é£¬Ä£¿éÖ®¼ä¿ÉÒÔ»¥ÏàÒÀÀµ¡£Webpack¶ÔËüÃǽøÐÐͳһµÄ¹ÜÀíÒÔ¼°´ò°ü·¢²¼£¬Æä¹Ù·½Ö÷Ò³ÓÃÏÂÃæÕâÕÅͼÀ´ËµÃ÷WebpackµÄ×÷Óãº

¿ÉÒÔ¿´µ½WebpackµÄÄ¿±ê¾ÍÊǶÔÏîÄ¿Öеľ²Ì¬×ÊÔ´½øÐÐͳһ¹ÜÀí£¬Îª²úÆ·µÄ×îÖÕ·¢²¼Ìṩ×îÓŵĴò°ü²¿Êð·½°¸¡£±¾Îľͽ«Î§ÈÆReact¶ÔÆäÏà¹ØÓ÷¨×öÒ»¸ö×ÜÌå½éÉÜ£¬´Ó¶øÄÜÈÃÄ㽫ÆäÓ¦ÓÃÔÚ×Ô¼ºµÄʵ¼ÊÏîĿ֮ÖС£

°²×°Webpack£¬²¢¼ÓÔØÒ»¸ö¼òµ¥µÄReact×é¼þWebpackÒ»°ã×÷Ϊȫ¾ÖµÄnpmÄ£¿é°²×°£º

npm install -g webpack

Ö®ºó±ãÓÐÁËÈ«¾ÖµÄwebpackÃüÁֱ½ÓÖ´ÐдËÃüÁî»áĬÈÏʹÓõ±Ç°Ä¿Â¼µÄwebpack.config.js×÷ΪÅäÖÃÎļþ¡£Èç¹ûÒªÖ¸¶¨ÁíÍâµÄÅäÖÃÎļþ£¬¿ÉÒÔÖ´ÐУº

webpack ¡ªconfig webpack.custom.config.js

¾¡¹ÜWebpack¿ÉÒÔͨ¹ýÃüÁîÐÐÀ´Ö¸¶¨²ÎÊý£¬µ«ÎÒÃÇͨ³£»á½«ËùÓÐÏà¹Ø²ÎÊý¶¨ÒåÔÚÅäÖÃÎļþÖС£Ò»°ãÎÒÃǻᶨÒåÁ½¸öÅäÖÃÎļþ£¬Ò»¸öÓÃÓÚ¿ª·¢Ê±£¬ÁíÍâÒ»¸öÓÃÓÚ²úÆ··¢²¼¡£Éú²ú»·¾³ÏµĴò°üÎļþ²»ÐèÒª°üº¬sourcemapµÈÓÃÓÚ¿ª·¢Ê±µÄ´úÂë¡£ÅäÖÃÎļþͨ³£·ÅÔÚÏîÄ¿¸ùĿ¼֮Ï£¬Æä±¾ÉíÒ²ÊÇÒ»¸ö±ê×¼µÄCommonJSÄ£¿é¡£

Ò»¸ö×î¼òµ¥µÄWebpackÅäÖÃÎļþwebpack.config.jsÈçÏÂËùʾ£º

module.exports = {
entry:[
'./app/main.js'
],
output: {
path: __dirname + '/assets/',
publicPath: "/assets/",
filename: 'bundle.js'
}
};

ÆäÖÐentry²ÎÊý¶¨ÒåÁË´ò°üºóµÄÈë¿ÚÎļþ£¬Êý×éÖеÄËùÓÐÎļþ»á°´Ë³Ðò´ò°ü¡£Ã¿¸öÎļþ½øÐÐÒÀÀµµÄµÝ¹é²éÕÒ£¬Ö±µ½ËùÓÐÏà¹ØÄ£¿é¶¼±»´ò°ü¡£output²ÎÊý¶¨ÒåÁËÊä³öÎļþµÄλÖã¬ÆäÖг£ÓõIJÎÊý°üÀ¨£º

path: ´ò°üÎļþ´æ·ÅµÄ¾ø¶Ô·¾¶

publicPath: ÍøÕ¾ÔËÐÐʱµÄ·ÃÎÊ·¾¶

filename: ´ò°üºóµÄÎļþÃû

ÏÖÔÚÀ´¿´ÈçºÎ´ò°üÒ»¸öReact×é¼þ¡£¼ÙÉèÓÐÈçÏÂÏîÄ¿Îļþ¼Ð½á¹¹£º

- react-sample
+ assets/
- js/
Hello.js
entry.js
index.html
webpack.config.js

ÆäÖÐHello.js¶¨ÒåÁËÒ»¸ö¼òµ¥µÄReact×é¼þ£¬Ê¹ÓÃES6Óï·¨£º

var React = require('react');
class Hello extends React.Component {
render() {
return (
<h1>Hello {this.props.name}!</h1>
);
}
}

entry.jsÊÇÈë¿ÚÎļþ£¬½«Ò»¸öHello×é¼þÊä³öµ½½çÃæ£º

var React = require('react');
var Hello = require('./Hello');
React.render(<Hello name="Nate" />, document.body);

index.htmlµÄÄÚÈÝÈçÏ£º

<html>
<head></head>
<body>
<script src="/assets/bundle.js"></script>
</body>
</html>

ÔÚÕâÀïHello.jsºÍentry.js¶¼ÊÇJSX×é¼þÓï·¨£¬ÐèÒª¶ÔËüÃǽøÐÐÔ¤´¦Àí£¬Õâ¾ÍÒªÒýÈëwebpackµÄJSX¼ÓÔØÆ÷¡£Òò´ËÔÚÅäÖÃÎļþÖмÓÈëÈçÏÂÅäÖãº

module: {
loaders: [
{ test: /\.jsx?$/, loaders: ['jsx?harmony']}
]
}

¼ÓÔØÆ÷µÄ¸ÅÄîÉÔºó»¹»áÏêϸ½éÉÜ£¬ÕâÀïÖ»ÐèÒªÖªµÀËüÄܽ«JSX±àÒë³ÉJavaScript²¢¼ÓÔØÎªWebpackÄ£¿é¡£ÕâÑùÔÚµ±Ç°Ä¿Â¼Ö´ÐÐwebpackÃüÁîÖ®ºó£¬ÔÚassetsĿ¼½«Éú³Ébundle.js£¬´ò°üÁËentry.jsµÄÄÚÈÝ¡£µ±ä¯ÀÀÆ÷´ò¿ªµ±Ç°·þÎñÆ÷ÉϵÄindex.html£¬½«ÏÔʾ¡°Hello Nate!¡±¡£ÕâÊÇÒ»¸ö·Ç³£¼òµ¥µÄÀý×Ó£¬ÑÝʾÁËÈçºÎʹÓÃWebpackÀ´½øÐÐ×î¼òµ¥µÄReact×é¼þ´ò°ü¡£

¼ÓÔØAMD»òCommonJSÄ£¿éÔÚʵ¼ÊÏîÄ¿ÖУ¬´úÂëÒÔÄ£¿é½øÐÐ×éÖ¯£¬AMDÊÇÔÚCommonJSµÄ»ù´¡ÉÏ¿¼ÂÇÁËä¯ÀÀÆ÷µÄÒì²½¼ÓÔØÌØÐÔ¶ø²úÉúµÄ£¬¿ÉÒÔÈÃÄ£¿éÒì²½¼ÓÔØ²¢±£Ö¤Ö´ÐÐ˳Ðò¡£¶øCommonJSµÄrequireº¯ÊýÔòÊÇͬ²½¼ÓÔØ¡£ÔÚWebpackÖбÊÕ߸ü¼ÓÍÆ¼öCommonJS·½Ê½È¥¼ÓÔØÄ£¿é£¬ÕâÖÖ·½Ê½Óï·¨¸ü¼Ó¼ò½àÖ±¹Û¡£¼´Ê¹ÔÚ¿ª·¢Ê±£¬ÎÒÃÇÒ²ÊǼÓÔØWebpack´ò°üºóµÄÎļþ£¬Í¨¹ýsourcemapÈ¥½øÐе÷ÊÔ¡£

³ýÁËÏîÄ¿±¾ÉíµÄÄ£¿é£¬ÎÒÃÇÒ²ÐèÒªÒÀÀµµÚÈý·½µÄÄ£¿é£¬ÏÖÔڱȽϳ£ÓõĵÚÈý·½Ä£¿é»ù±¾¶¼Í¨¹ýnpm½øÐз¢²¼£¬Ê¹ÓÃËüÃÇÒѾ­ÎÞÐèµ¥¶ÀÏÂÔØ¹ÜÀí£¬ÐèҪʱִÐÐnpm install¼´¿É¡£ÀýÈ磬ÎÒÃÇÐèÒªÒÀÀµjQuery£¬Ö»ÐèÖ´ÐУº

npm install jquery ¡ªsave-dev

¸ü¶àÇé¿öÏÂÎÒÃÇÊÇÔÚÏîÄ¿µÄpackage.jsonÖнøÐÐÒÀÀµ¹ÜÀí£¬È»ºóͨ¹ýÖ±½ÓÖ´ÐÐnpm installÀ´°²×°ËùÓÐÒÀÀµ¡£ÕâÑùÔÚÏîÄ¿µÄ´úÂë²Ö¿âÖв¢²»ÐèÒª´æ´¢Êµ¼ÊµÄµÚÈý·½ÒÀÀµ¿âµÄ´úÂë¡£

°²×°Ö®ºó£¬ÔÚÐèҪʹÓÃjqueryµÄÄ£¿éÖÐÐèÒªÔÚÍ·²¿½øÐÐÒýÈ룺

var $ = require('jquery');
$('body').html('Hello Webpack!');

¿ÉÒÔ¿´µ½£¬ÕâÖÖÒÔCommonJSµÄͬ²½ÐÎʽȥÒýÈëÆäËüÄ£¿éµÄ·½Ê½´úÂë¸ü¼Ó¼ò½à¡£ä¯ÀÀÆ÷²¢²»»áʵ¼ÊµÄȥͬ²½¼ÓÔØÕâ¸öÄ£¿é£¬requireµÄ´¦ÀíÊÇÓÉWebpack½øÐнâÎöºÍ´ò°üµÄ£¬ä¯ÀÀÆ÷Ö»ÐèÒªÖ´Ðдò°üºóµÄ´úÂë¡£Webpack×ÔÉíÒѾ­¿ÉÒÔÍêÈ«´¦ÀíJavaScriptÄ£¿éµÄ¼ÓÔØ£¬µ«ÊǶÔÓÚReactÖеÄJSXÓï·¨£¬Õâ¾ÍÐèҪʹÓÃWebpackµÄÀ©Õ¹¼ÓÔØÆ÷À´´¦ÀíÁË¡£

Webpack¿ª·¢·þÎñÆ÷³ýÁËÌṩģ¿é´ò°ü¹¦ÄÜ£¬Webpack»¹ÌṩÁËÒ»¸ö»ùÓÚNode.js Express¿ò¼ÜµÄ¿ª·¢·þÎñÆ÷£¬ËüÊÇÒ»¸ö¾²Ì¬×ÊÔ´Web·þÎñÆ÷£¬¶ÔÓÚ¼òµ¥¾²Ì¬Ò³Ãæ»òÕß½öÒÀÀµÓÚ¶ÀÁ¢·þÎñµÄǰ¶ËÒ³Ãæ£¬¶¼¿ÉÒÔÖ±½ÓʹÓÃÕâ¸ö¿ª·¢·þÎñÆ÷½øÐпª·¢¡£ÔÚ¿ª·¢¹ý³ÌÖУ¬¿ª·¢·þÎñÆ÷»á¼àÌýÿһ¸öÎļþµÄ±ä»¯£¬½øÐÐʵʱ´ò°ü£¬²¢ÇÒ¿ÉÒÔÍÆËÍ֪ͨǰ¶ËÒ³Ãæ´úÂë·¢ÉúÁ˱仯£¬´Ó¶ø¿ÉÒÔʵÏÖÒ³ÃæµÄ×Ô¶¯Ë¢Ð¡£

Webpack¿ª·¢·þÎñÆ÷ÐèÒªµ¥¶À°²×°£¬Í¬ÑùÊÇͨ¹ýnpm½øÐУº

npm install -g webpack-dev-server

Ö®ºó±ã¿ÉÒÔÔËÐÐwebpack-dev-serverÃüÁîÀ´Æô¶¯¿ª·¢·þÎñÆ÷£¬È»ºóͨ¹ýlocalhost:8080/webpack-dev-server/·ÃÎʵ½Ò³ÃæÁË¡£Ä¬ÈÏÇé¿öÏ·þÎñÆ÷ÒÔµ±Ç°Ä¿Â¼×÷Ϊ·þÎñÆ÷Ŀ¼¡£ÔÚReact¿ª·¢ÖУ¬ÎÒÃÇͨ³£»á½áºÏreact-hot-loaderÀ´Ê¹Óÿª·¢·þÎñÆ÷£¬Òò´ËÕâÀï²»×öÌ«¶à½éÉÜ£¬Ö»ÐèÒªÖªµÀÓÐÕâÑùÒ»¸ö¿ª·¢·þÎñÆ÷¿ÉÒÔÓÃÓÚ¿ª·¢Ê±µÄÄÚÈÝʵʱ´ò°üºÍÍÆËÍ¡£ÏêϸÅäÖúÍÓ÷¨¿ÉÒԲο¼¹Ù·½Îĵµ¡£

WebpackÄ£¿é¼ÓÔØÆ÷£¨Loaders£©Webpack½«ËùÓо²Ì¬×ÊÔ´¶¼ÈÏΪÊÇÄ£¿é£¬±ÈÈçJavaScript£¬CSS£¬LESS£¬TypeScript£¬JSX£¬CoffeeScript£¬Í¼Æ¬µÈµÈ£¬´Ó¶ø¿ÉÒÔ¶ÔÆä½øÐÐͳһ¹ÜÀí¡£Îª´ËWebpackÒýÈëÁ˼ÓÔØÆ÷µÄ¸ÅÄ³ýÁË´¿JavaScriptÖ®Í⣬ÿһÖÖ×ÊÔ´¶¼¿ÉÒÔͨ¹ý¶ÔÓ¦µÄ¼ÓÔØÆ÷´¦Àí³ÉÄ£¿é¡£ºÍ´ó¶àÊý°ü¹ÜÀíÆ÷²»Ò»ÑùµÄÊÇ£¬WebpackµÄ¼ÓÔØÆ÷Ö®¼ä¿ÉÒÔ½øÐд®Áª£¬Ò»¸ö¼ÓÔØÆ÷µÄÊä³ö¿ÉÒÔ³ÉΪÁíÒ»¸ö¼ÓÔØÆ÷µÄÊäÈë¡£±ÈÈçLESSÎļþÏÈͨ¹ýless-load´¦Àí³Écss£¬È»ºóÔÙͨ¹ýcss-loader¼ÓÔØ³ÉcssÄ£¿é£¬×îºóÓÉstyle-loader¼ÓÔØÆ÷¶ÔÆä×ö×îºóµÄ´¦Àí£¬´Ó¶øÔËÐÐʱ¿ÉÒÔͨ¹ýstyle±êÇ©½«ÆäÓ¦Óõ½×îÖÕµÄä¯ÀÀÆ÷»·¾³¡£

¶ÔÓÚReactµÄJSXÒ²ÊÇÈç´Ë£¬Ëüͨ¹ýjsx-loaderÀ´ÔØÈë¡£jsx-loaderרÃÅÓÃÓÚÔØÈëReactµÄJSXÎļþ£¬WebpackµÄ¼ÓÔØÆ÷Ö§³Ö²ÎÊý£¬jsx-loader¾Í¿ÉÒÔÌí¼Ó?harmony²ÎÊýʹÆäÖ§³ÖES6Óï·¨¡£ÎªÁËÈÃWebpackʶ±ðʲôÑùµÄ×ÊÔ´Ó¦¸ÃÓÃʲô¼ÓÔØÆ÷È¥ÔØÈ룬ÐèÒªÔÚÅäÖÃÎļþ½øÐÐÅäÖãºÍ¨¹ýÕýÔò±í´ïʽ¶ÔÎļþÃû½øÐÐÆ¥Åä¡£ÀýÈ磺

module: {
preLoaders: [{
test: /\.js$/,
exclude: /node_modules/,
loader: 'jsxhint'
}],
loaders: [{
test: /\.js$/,
exclude: /node_modules/,
loader: 'react-hot!jsx-loader?harmony'
}, {
test: /\.less/,
loader: 'style-loader!css-loader!less-loader'
}, {
test: /\.(css)$/,
loader: 'style-loader!css-loader'
}, {
test: /\.(png|jpg)$/,
loader: 'url-loader?limit=8192'
}]
}

¿ÉÒÔ¿´µ½£¬¸ÃʹÓÃʲô¼ÓÔØÆ÷Íêȫȡ¾öÓÚÕâÀïµÄÅäÖ㬼´Ê¹¶ÔÓÚJSXÎļþ£¬ÎÒÃÇÒ²¿ÉÒÔÓÃjs×÷Ϊºó׺£¬´Ó¶øËùÓеÄJavaScript¶¼¿ÉÒÔͨ¹ýjsx-loaderÔØÈ룬ÒòΪjsx±¾Éí¾ÍÊÇÍêÈ«¼æÈÝJavaScriptµÄ£¬ËùÒÔ¼´Ê¹Ã»ÓÐJSXÓï·¨£¬ÆÕͨJavaScriptÄ£¿éÒ²¿ÉÒÔʹÓÃjsx-loaderÀ´ÔØÈë¡£

¼ÓÔØÆ÷Ö®¼äµÄ¼¶ÁªÊÇͨ¹ý¸Ð̾ºÅÀ´Á¬½Ó£¬ÀýÈç¶ÔÓÚLESS×ÊÔ´£¬Ð´·¨Îªstyle-loader!css-loader!less-loader¡£¶ÔÓÚСÐ͵ÄͼƬ×ÊÔ´£¬Ò²¿ÉÒÔ½«Æä½øÐÐͳһ´ò°ü£¬ÓÉurl-loaderʵÏÖ£¬´úÂëÖÐurl-loader?limit=8192º¬Òå¾ÍÊǶÔÓÚËùÓÐСÓÚ8192×Ö½ÚµÄͼƬ×ÊÔ´Ò²½øÐдò°ü¡£ÕâÔÚÒ»¶¨³Ì¶ÈÉÏ¿ÉÒÔÌæ´úCss Sprites·½°¸£¬ÓÃÓÚ¼õÉÙ¶ÔÓÚСͼƬ×ÊÔ´µÄHTTPÇëÇóÊýÁ¿¡£

³ýÁËÒÑÓмÓÔØÆ÷£¬ÄãÒ²¿ÉÒÔ×Ô¼ºÊµÏÖ×Ô¼ºµÄ¼ÓÔØÆ÷£¬´Ó¶ø¿ÉÒÔÈÃWebpackͳһ¹ÜÀíÏîÄ¿ÌØ¶¨µÄ¾²Ì¬×ÊÔ´¡£ÏÖÔÚÒ²ÒѾ­ÓкܶàµÚÈý·½µÄ¼ÓÔØÆ÷ʵÏÖ³£¼û¾²Ì¬×ÊÔ´µÄ´ò°ü¹ÜÀí£¬¿ÉÒԲο¼WebpackÖ÷Ò³ÉϵļÓÔØÆ÷ÁÐ±í¡£

React¿ª·¢ÉñÆ÷£ºreact-hot-loaderWebpack±¾Éí¾ßÓÐÔËÐÐʱģ¿éÌæ»»¹¦ÄÜ£¬³ÆÖ®ÎªHot Module Replacement (HMR)¡£µ±Ä³¸öÄ£¿é´úÂë·¢Éú±ä»¯Ê±£¬Webpackʵʱ´ò°ü½«ÆäÍÆË͵½Ò³Ãæ²¢½øÐÐÌæ»»£¬´Ó¶øÎÞÐèË¢ÐÂÒ³Ãæ¾ÍʵÏÖ´úÂëÌæ»»¡£Õâ¸ö¹ý³ÌÏà¶Ô±È½Ï¸´ÔÓ£¬ÐèÒª½øÐÐ¶à·½Ãæ¿¼ÂǺÍÅäÖ᣶øÏÖÔÚÕë¶ÔReact³öÏÖÁËÒ»¸öµÚÈý·½react-hot-loader¼ÓÔØÆ÷£¬Ê¹ÓÃÕâ¸ö¼ÓÔØÆ÷¾Í¿ÉÒÔÇáËÉʵÏÖReact×é¼þµÄÈÈÌæ»»£¬·Ç³£·½±ã¡£ÆäʵÕýÊÇÒòΪReactµÄÿһ´Î¸üж¼ÊÇÈ«¾ÖˢеÄÐéÄâDOM»úÖÆ£¬ÈÃReact×é¼þµÄÈÈÌæ»»¿ÉÒÔ³ÉΪͨÓõļÓÔØÆ÷£¬´Ó¶ø¼«´óÌá¸ß¿ª·¢Ð§ÂÊ¡£

ҪʹÓÃreact-hot-loader£¬Ê×ÏÈͨ¹ýnpm½øÐа²×°£º

npm install ¡ªsave-dev react-hot-loader

Ö®ºó£¬Webpack¿ª·¢·þÎñÆ÷ÐèÒª¿ªÆôHMR²ÎÊýhot£¬ÎªÁË·½±ã£¬ÎÒÃÇ´´½¨Ò»¸öÃûΪserver.jsµÄÎļþÓÃÒÔÆô¶¯Webpack¿ª·¢·þÎñÆ÷£º

var webpack = require('webpack');
var WebpackDevServer = require('webpack-dev-server');
var config = require('../webpack.config');
new WebpackDevServer(webpack(config), {
publicPath: config.output.publicPath,
hot: true,
noInfo: false,
historyApiFallback: true
}).listen(3000, '127.0.0.1', function (err, result) {
if (err) {
console.log(err);
}
console.log('Listening at localhost:3000');
});

ΪÁËÈȼÓÔØReact×é¼þ£¬ÎÒÃÇÐèÒªÔÚǰ¶ËÒ³ÃæÖмÓÈëÏàÓ¦µÄ´úÂ룬ÓÃÒÔ½ÓÊÕWebpackÍÆË͹ýÀ´µÄ´úÂëÄ£¿é£¬½ø¶ø¿ÉÒÔ֪ͨËùÓÐÏà¹ØReact×é¼þ½øÐÐÖØÐÂRender¡£¼ÓÈëÕâ¸ö´úÂëºÜ¼òµ¥£º

entry: [
'webpack-dev-server/client?http://127.0.0.1:3000', // WebpackDevServer host and port
'webpack/hot/only-dev-server',
'./scripts/entry' // Your app?s entry point
]

ÐèҪעÒâµÄÊÇ£¬ÕâÀïµÄclient?http://127.0.0.1:3000ÐèÒªºÍÔÚserver.jsÖÐÆô¶¯Webpack¿ª·¢·þÎñÆ÷µÄµØÖ·Æ¥Åä¡£ÕâÑù£¬´ò°üÉú³ÉµÄÎļþ¾ÍÖªµÀ¸Ã´ÓÄÄÀïÈ¥»ñÈ¡¶¯Ì¬µÄ´úÂë¸üС£ÏÂÒ»²½£¬ÎÒÃÇÐèÒªÈÃWebpackÓÃreact-hot-loaderÈ¥¼ÓÔØReact×é¼þ£¬ÈçÉÏÒ»½ÚËù½éÉÜ£¬Õâͨ¹ý¼ÓÔØÆ÷ÅäÖÃÍê³É£º

loaders: [{
test: /\.js$/,
exclude: /node_modules/,
loader: 'react-hot!jsx-loader?harmony'
},
¡­
]

×öÍêÕâЩÅäÖÃÖ®ºó£¬Ê¹ÓÃNode.jsÔËÐÐserver.js£º

node server.js

¼´¿ÉÆô¶¯¿ª·¢·þÎñÆ÷²¢ÊµÏÖReact×é¼þµÄÈȼÓÔØ¡£ÎªÁË·½±ã£¬ÎÒÃÇÒ²¿ÉÒÔÔÚpackage.jsonÖмÓÈëÒ»½ÚÅäÖãº

"scripts": {
"start": "node ./js/server.js"
}

´Ó¶øÍ¨¹ýnpm startÃüÁî¼´¿ÉÆô¶¯¿ª·¢·þÎñÆ÷¡£Ê¾Àý´úÂëÒ²ÉÏ´«ÔÚGithubÉÏ£¬´ó¼Ò¿ÉÒԲο¼¡£

ÕâÑù£¬ReactµÄÈȼÓÔØ¿ª·¢»·¾³¼´ÅäÖÃÍê³É£¬ÈκÎÐÞ¸ÄÖ»ÒªÒÔ±£´æ£¬¾Í»áÔÚÒ³ÃæÉÏÁ¢¿ÌÌåÏÖ³öÀ´¡£ÎÞÂÛÊǶÔÑùʽÐ޸쬻¹ÊǶԽçÃæäÖȾµÄÐ޸ģ¬ÉõÖÁʼþ°ó¶¨´¦Àíº¯ÊýµÄÐ޸쬶¼¿ÉÒÔÁ¢¿ÌÉúЧ£¬²»µÃ²»ËµÊÇÌá¸ß¿ª·¢Ð§ÂʵÄÉñÆ÷¡£

½«Webpack¿ª·¢·þÎñÆ÷¼¯³Éµ½ÒÑÓзþÎñÆ÷¾¡¹ÜWebpack¿ª·¢·þÎñÆ÷¿ÉÒÔÖ±½ÓÓÃÓÚ¿ª·¢£¬µ«Êµ¼ÊÏîÄ¿ÖÐÎÒÃÇ¿ÉÄܱØÐëʹÓÃ×Ô¼ºµÄWeb·þÎñÆ÷¡£Õâ¾ÍÐèÒªÎÒÃÇÄܽ«WebpackµÄ·þÎñ¼¯³Éµ½ÒÑÓзþÎñÆ÷£¬À´Ê¹ÓÃWebpackÌṩµÄÄ£¿é´ò°üºÍ¼ÓÔØ¹¦ÄÜ¡£ÒªÊµÏÖÕâÒ»µãÆäʵ·Ç³£ÈÝÒ×£¬Ö»ÐèÒªÔÚÔØÈë´ò°üÎļþʱָ¶¨ÍêÕûµÄURLµØÖ·£¬ÀýÈ磺

<script src="http://127.0.0.1:3000/assets/bundle.js"></script>

Õâ¾Í¸æËßµ±Ç°Ò³ÃæÓ¦¸ÃÈ¥ÁíÍâÒ»¸ö·þÎñÆ÷»ñµÃ½Å±¾×ÊÔ´Îļþ£¬ÔÚ֮ǰÎÒÃÇÒѾ­ÔÚÅäÖÃÎļþÖÐÖ¸¶¨ÁË¿ª·¢·þÎñÆ÷µÄµØÖ·£¬Òò´Ë´ò°üºóµÄÎļþÒ²ÖªµÀÓ¦¸Ãͨ¹ýÄĸöµØÖ·È¥½¨Á¢Socket IOÀ´¶¯Ì¬¼ÓÔØÄ£¿é¡£Õû¸ö×ÊÔ´¼Ü¹¹ÈçÏÂͼËùʾ£º

´ò°ü³É¶à¸ö×ÊÔ´Îļþ½«ÏîÄ¿ÖеÄÄ£¿é´ò°ü³É¶à¸ö×ÊÔ´ÎļþÓÐÁ½¸öÄ¿µÄ£º

½«¶à¸öÒ³ÃæµÄ¹«ÓÃÄ£¿é¶ÀÁ¢´ò°ü£¬´Ó¶ø¿ÉÒÔÀûÓÃä¯ÀÀÆ÷»º´æ»úÖÆÀ´Ìá¸ßÒ³Ãæ¼ÓÔØÐ§ÂÊ£»

¼õÉÙÒ³Ãæ³õ´Î¼ÓÔØÊ±¼ä£¬Ö»Óе±Ä³¹¦Äܱ»Óõ½Ê±£¬²ÅÈ¥¶¯Ì¬µÄ¼ÓÔØ¡£

WebpackÌṩÁ˷dz£Ç¿´óµÄ¹¦ÄÜÈÃÄãÄܹ»Áé»îµÄ¶Ô´ò°ü·½°¸½øÐÐÅäÖá£Ê×ÏÈÀ´¿´ÈçºÎ´´½¨¶à¸öÈë¿ÚÎļþ£º

{
entry: { a: "./a", b: "./b" },
output: { filename: "[name].js" },
plugins: [ new webpack.CommonsChunkPlugin("init.js") ]
}

¿ÉÒÔ¿´µ½£¬ÅäÖÃÎļþÖж¨ÒåÁËÁ½¸ö´ò°ü×ÊÔ´¡°a¡±ºÍ¡°b¡±£¬ÔÚÊä³öÎļþÖÐʹÓ÷½À¨ºÅÀ´»ñµÃÊä³öÎļþÃû¡£¶øÔÚ²å¼þÉèÖÃÖÐʹÓÃÁËCommonsChunkPlugin£¬WebpackÖн«´ò°üºóµÄÎļþ¶¼³ÆÖ®Îª¡°Chunk¡±¡£Õâ¸ö²å¼þ¿ÉÒÔ½«¶à¸ö´ò°üºóµÄ×ÊÔ´ÖеĹ«¹²²¿·Ö´ò°ü³Éµ¥¶ÀµÄÎļþ£¬ÕâÀïÖ¸¶¨¹«¹²ÎļþÊä³öΪ¡°init.js¡±¡£ÕâÑùÎÒÃǾͻñµÃÁËÈý¸ö´ò°üºóµÄÎļþ£¬ÔÚhtmlÒ³ÃæÖпÉÒÔÕâÑùÒýÓãº

<script src="init.js"></script>
<script src="a.js"></script>
<script src="b.js"></script>

³ýÁËÔÚÅäÖÃÎļþÖжԴò°üÎļþ½øÐÐÅäÖ㬻¹¿ÉÒÔÔÚ´úÂëÖнøÐж¨Ò壺require.ensure£¬ÀýÈ磺

require.ensure(["module-a", "module-b"], function(require) {
var a = require("module-a");
// ...
});

WebpackÔÚ±àÒëʱ»áɨÃèµ½ÕâÑùµÄ´úÂ룬²¢¶ÔÒÀÀµÄ£¿é½øÐÐ×Ô¶¯´ò°ü£¬ÔËÐйý³ÌÖÐÖ´Ðе½Õâ¶Î´úÂëʱ»á×Ô¶¯ÕÒµ½´ò°üºóµÄÎļþ½øÐа´Ðè¼ÓÔØ¡£
С½á±¾ÎĽáºÏReact½éÉÜÁËWebpackµÄ»ù±¾¹¦ÄܺÍÓ÷¨£¬Ï£ÍûÄÜÈôó¼Ò¶ÔÕâ¸öÐÂÐ˶øÇ¿´óµÄÄ£¿é¹ÜÀí¹¤¾ßÓÐÒ»¸ö×ÜÌåµÄÈÏʶ£¬²¢Äܽ«ÆäÓ¦ÓÃÔÚʵ¼ÊµÄÏîÄ¿¿ª·¢ÖС£±ÊÕßÒ²½«ÆäÓ¦ÓÃÔÚ֮ǰÌṩµÄReactʾÀý×é¼þÏîÄ¿ÖУ¬´ó¼Ò¿ÉÒԲο¼¡£³ýÁËÕâÀï½éÉܵŦÄÜ£¬Webpack»¹ÓÐÐí¶àÇ¿´óµÄÌØÐÔ£¬ÀýÈç²å¼þ»úÖÆ¡¢Ö§³Ö¶¯Ì¬±í´ïʽµÄrequire¡¢´ò°üÎļþµÄÖÇÄÜÖØ×é¡¢ÐÔÄÜÓÅ»¯¡¢´úÂë»ìÏýµÈµÈ¡£ÏÞÓÚÆª·ù²»ÔÙÒ»Ò»½éÉÜ£¬Æä¹Ù·½ÎĵµÒ²·Ç³£ÍêÉÆ£¬ÐèҪʱ¿ÉÒԲο¼¡£

   
3888 ´Îä¯ÀÀ       27
Ïà¹ØÎÄÕÂ

Java΢·þÎñÐÂÉú´úÖ®Nacos
ÉîÈëÀí½âJavaÖеÄÈÝÆ÷
JavaÈÝÆ÷Ïê½â
Java´úÂëÖÊÁ¿¼ì²é¹¤¾ß¼°Ê¹Óð¸Àý
Ïà¹ØÎĵµ

JavaÐÔÄÜÓÅ»¯
Spring¿ò¼Ü
SSM¿ò¼Ü¼òµ¥¼òÉÜ
´ÓÁ㿪ʼѧjava±à³Ì¾­µä
Ïà¹Ø¿Î³Ì

¸ßÐÔÄÜJava±à³ÌÓëϵͳÐÔÄÜÓÅ»¯
JavaEE¼Ü¹¹¡¢ Éè¼ÆÄ£Ê½¼°ÐÔÄܵ÷ÓÅ
Java±à³Ì»ù´¡µ½Ó¦Óÿª·¢
JAVAÐéÄâ»úÔ­ÀíÆÊÎö
×îл¼Æ»®
DeepSeekÔÚÈí¼þ²âÊÔÓ¦ÓÃʵ¼ù 4-12[ÔÚÏß]
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢Êµ¼ù 4-19[ÔÚÏß]
UAF¼Ü¹¹ÌåϵÓëʵ¼ù 4-11[±±¾©]
AIÖÇÄÜ»¯Èí¼þ²âÊÔ·½·¨Óëʵ¼ù 5-23[ÉϺ£]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 4-26[±±¾©]
ÒµÎñ¼Ü¹¹Éè¼ÆÓ뽨ģ 4-18[±±¾©]

Java ÖеÄÖÐÎıàÂëÎÊÌâ
Java»ù´¡ÖªÊ¶µÄÈýÊ®¸ö¾­µäÎÊ´ð
Íæ×ª Java Web Ó¦Óÿª·¢
ʹÓÃSpring¸üºÃµØ´¦ÀíStruts
ÓÃEclipse¿ª·¢iPhone WebÓ¦ÓÃ
²å¼þϵͳ¿ò¼Ü·ÖÎö

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

Struts+Spring+Hibernate/EJB+ÐÔÄÜÓÅ»¯
»ªÏÄ»ù½ð ActiveMQ Ô­ÀíÓë¹ÜÀí
ijÃñº½¹«Ë¾ Java»ù´¡±à³Ìµ½Ó¦Óÿª·¢
ij·çµç¹«Ë¾ Java Ó¦Óÿª·¢Æ½Ì¨ÓëÇ¨ÒÆ
ÈÕÕÕ¸Û J2EEÓ¦Óÿª·¢¼¼Êõ¿ò¼ÜÓëʵ¼ù
ij¿ç¹ú¹«Ë¾ ¹¤×÷Á÷¹ÜÀíJBPM
¶«·½º½¿Õ¹«Ë¾ ¸ß¼¶J2EE¼°ÆäÇ°ÑØ¼¼Êõ