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

1Ôª 10Ôª 50Ôª





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



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
webpackÔ­ÀíÓëʵս
 
  1802  次浏览      28
  2020-5-7
 
±à¼­ÍƼö:
±¾ÎÄÖ÷Òª½²½âwebpackµÄÔ­ÀíÓë±¾ÖÊÈÃÄã¿ÉÒÔÔÚʵսÖÐÁé»îÓ¦ÓÃwebpack£¬½Ì»áÄãÓÃwebpack½â¾öʵսÖг£¼ûµÄÎÊÌ⣬ϣÍû¶ÔÄúÄÜÓÐËù°ïÖú¡£
±¾ÎÄÀ´×ÔÓÚ²©¿ÍÔ°,ÓÉ»ðÁú¹ûÈí¼þAlice±à¼­ÍƼö¡£

webpackÊÇÒ»¸öjs´ò°ü¹¤¾ß£¬²»Ò»¸öÍêÕûµÄǰ¶Ë¹¹½¨¹¤¾ß¡£ËüµÄÁ÷ÐеÃÒæÓÚÄ£¿é»¯ºÍµ¥Ò³Ó¦ÓõÄÁ÷ÐС£webpackÌṩÀ©Õ¹»úÖÆ£¬ÔÚÅÓ´óµÄÉçÇøÖ§³Öϸ÷ÖÖ³¡¾°»ù±¾Ëü¶¼¿ÉÕÒµ½½â¾ö·½°¸¡£

webpackÔ­Àí

ÔÚÉîÈëʵսǰÏÈÒªÖªµÀwebpackµÄÔËÐÐÔ­Àí

webpackºËÐĸÅÄî

entry Ò»¸ö¿ÉÖ´ÐÐÄ£¿é»ò¿âµÄÈë¿ÚÎļþ¡£

chunk ¶à¸öÎļþ×é³ÉµÄÒ»¸ö´úÂë¿é£¬ÀýÈç°ÑÒ»¸ö¿ÉÖ´ÐÐÄ£¿éºÍËüËùÓÐÒÀÀµµÄÄ£¿é×éºÏºÍÒ»¸ö chunk ÕâÌåÏÖÁËwebpackµÄ´ò°ü»úÖÆ¡£

loader Îļþת»»Æ÷£¬ÀýÈç°Ñes6ת»»Îªes5£¬scssת»»Îªcss¡£

plugin ²å¼þ£¬ÓÃÓÚÀ©Õ¹webpackµÄ¹¦ÄÜ£¬ÔÚwebpack¹¹½¨ÉúÃüÖÜÆÚµÄ½ÚµãÉϼÓÈëÀ©Õ¹hookΪwebpack¼ÓÈ빦ÄÜ¡£

webpack¹¹½¨Á÷³Ì

´ÓÆô¶¯webpack¹¹½¨µ½Êä³ö½á¹û¾­ÀúÁËһϵÁйý³Ì£¬ËüÃÇÊÇ£º

½âÎöwebpackÅäÖòÎÊý£¬ºÏ²¢´Óshell´«ÈëºÍwebpack.config.jsÎļþÀïÅäÖõIJÎÊý£¬Éú²ú×îºóµÄÅäÖýá¹û¡£

×¢²áËùÓÐÅäÖõIJå¼þ£¬ºÃÈòå¼þ¼àÌýwebpack¹¹½¨ÉúÃüÖÜÆÚµÄʼþ½Úµã£¬ÒÔ×ö³ö¶ÔÓ¦µÄ·´Ó¦¡£

´ÓÅäÖõÄentryÈë¿ÚÎļþ¿ªÊ¼½âÎöÎļþ¹¹½¨ASTÓï·¨Ê÷£¬ÕÒ³öÿ¸öÎļþËùÒÀÀµµÄÎļþ£¬µÝ¹éÏÂÈ¥¡£

ÔÚ½âÎöÎļþµÝ¹éµÄ¹ý³ÌÖиù¾ÝÎļþÀàÐͺÍloaderÅäÖÃÕÒ³öºÏÊʵÄloaderÓÃÀ´¶ÔÎļþ½øÐÐת»»¡£

µÝ¹éÍêºóµÃµ½Ã¿¸öÎļþµÄ×îÖÕ½á¹û£¬¸ù¾ÝentryÅäÖÃÉú³É´úÂë¿échunk¡£

Êä³öËùÓÐchunkµ½Îļþϵͳ¡£

ÐèҪעÒâµÄÊÇ£¬ÔÚ¹¹½¨ÉúÃüÖÜÆÚÖÐÓÐһϵÁвå¼þÔÚºÏÊʵÄʱ»ú×öÁ˺ÏÊʵÄÊÂÇ飬±ÈÈçUglifyJsPlugin»áÔÚloaderת»»µÝ¹éÍêºó¶Ô½á¹ûÔÙʹÓÃUglifyJsѹËõ¸²¸Ç֮ǰµÄ½á¹û¡£

³¡¾°ºÍ·½°¸

ͨ¹ý¸÷ÖÖ³¡¾°ºÍ¶ÔÓ¦µÄ½â¾ö·½°¸ÈÃÄãÉîÈëÕÆÎÕwebpack

µ¥Ò³Ó¦ÓÃ

demo redemo

Ò»¸öµ¥Ò³Ó¦ÓÃÐèÒªÅäÖÃÒ»¸öentryÖ¸Ã÷Ö´ÐÐÈë¿Ú£¬webpack»áΪentryÉú³ÉÒ»¸ö°üº¬Õâ¸öÈë¿ÚËùÓÐÒÀÀµÎļþµÄchunk£¬µ«ÒªÈÃËüÔÚä¯ÀÀÆ÷ÀïÅÜÆðÀ´»¹ÐèÒªÒ»¸öHTMLÎļþÀ´¼ÓÔØchunkÉú³ÉµÄjsÎļþ£¬Èç¹ûÌáÈ¡³öÁËcss»¹ÐèÒªÈÃHTMLÎļþÒýÈëÌáÈ¡³öµÄcss¡£web-webpack-pluginÀïµÄWebPlugin¿ÉÒÔ×Ô¶¯µÄÍê³ÉÕâЩ¹¤×÷¡£

webpackÅäÖÃÎļþ

const { WebPlugin } = require('web-webpack-plugin');
module.exports = {
entry: {
app: './src/doc/index.js',
},
plugins: [
// Ò»¸öWebPlugin¶ÔÓ¦Éú³ÉÒ»¸öhtmlÎļþ
new WebPlugin({
//Êä³öµÄhtmlÎļþÃû³Æ
filename: 'index.html',
//Õâ¸öhtmlÒÀÀµµÄ`entry`
requires: ['app'],
}),
],
};

requires: ['doc']Ö¸Ã÷Õâ¸öHTMLÒÀÀµÄÄЩentry£¬entryÉú³ÉµÄjsºÍcss»á×Ô¶¯×¢Èëµ½HTMLÀï¡£

Ä㻹¿ÉÒÔÅäÖÃÕâЩ×ÊÔ´µÄ×¢È뷽ʽ£¬Ö§³ÖÈçÏÂÊôÐÔ£º

_dist Ö»ÓÐÔÚÉú²ú»·¾³Ï²ÅÒýÈë¸Ã×ÊÔ´

_dev Ö»ÓÐÔÚ¿ª·¢»·¾³Ï²ÅÒýÈë¸Ã×ÊÔ´

_inline °Ñ¸Ã×ÊÔ´µÄÄÚÈÝDZÈëµ½htmlÀï

_ie Ö»ÓÐIEä¯ÀÀÆ÷²ÅÐèÒªÒýÈëµÄ×ÊÔ´

ÒªÉèÖÃÕâЩÊôÐÔ¿ÉÒÔͨ¹ýÔÚjsÀïÅäÖÃ

new WebPlugin({
filename: 'index.html',
requires: {
app:{
_dist:true,
_inline:false,
}
},
}),

»òÕßÔÚÄ£°æÀïÉèÖã¬Ê¹ÓÃÄ£°æµÄºÃ´¦ÊÇÁé»îµÄ¿ØÖÆ×ÊÔ´×¢Èëµã¡£

new WebPlugin({
filename: 'index.html',
template: './template.html',
}),
<!DOCTYPE html>
<html lang="zh-cn">
<head>
<link rel="stylesheet" href="app?_inline">
<script src="ie-polyfill?_ie"></script>
</head>
<body>
<div id="react-body"></div>
<script src="app"></script>
</body>
</html>

WebPlugin²å¼þ½è¼øÁËfis3µÄ˼Ï룬²¹×ãÁËwebpackȱʧµÄÒÔHTMLΪÈë¿ÚµÄ¹¦ÄÜ¡£ÏëÁ˽âWebPluginµÄ¸ü¶à¹¦ÄÜ£¬¼ûÎĵµ¡£

Ò»¸öÏîÄ¿Àï¹ÜÀí¶à¸öµ¥Ò³Ó¦ÓÃ

Ò»°ãÏîÄ¿Àï»á°üº¬¶à¸öµ¥Ò³Ó¦Óã¬ËäÈ»¶à¸öµ¥Ò³Ó¦ÓÃÒ²¿ÉÒԺϲ¢³ÉÒ»¸öµ«ÊÇÕâÑù×ö»áµ¼ÖÂÓû§Ã»·ÃÎʵIJ¿·ÖÒ²¼ÓÔØÁË¡£Èç¹ûÏîÄ¿ÀïÓкܶà¸öµ¥Ò³Ó¦Óã¬ÎªÃ¿¸öµ¥Ò³Ó¦ÓÃÅäÖÃÒ»¸öentryºÍWebPlugin£¿Èç¹ûÏîÄ¿ÓÖÐÂÔöÁËÒ»¸öµ¥Ò³Ó¦Óã¬ÓÖÈ¥ÐÂÔöwebpackÅäÖã¿ÕâÑù×öÌ«Âé·³ÁË£¬web-webpack-pluginÀïµÄAutoWebPlugin¿ÉÒÔ·½±ãµÄ½â¾öÕâЩÎÊÌâ¡£

module.exports = {
plugins: [
// ËùÓÐÒ³ÃæµÄÈë¿ÚĿ¼
new AutoWebPlugin('./src/'),
]
};

AutoWebPlugin»á°Ñ./src/Ŀ¼ÏÂËùÓÐÿ¸öÎļþ¼Ð×÷Ϊһ¸öµ¥Ò³Ò³ÃæµÄÈë¿Ú£¬×Ô¶¯ÎªËùÓеÄÒ³ÃæÈë¿ÚÅäÖÃÒ»¸öWebPluginÊä³ö¶ÔÓ¦µÄhtml¡£ÒªÐÂÔöÒ»¸öÒ³Ãæ¾ÍÔÚ./src/ÏÂн¨Ò»¸öÎļþ¼Ð°üº¬Õâ¸öµ¥Ò³Ó¦ÓÃËùÒÀÀµµÄ´úÂ룬AutoWebPlugin×Ô¶¯Éú³ÉÒ»¸öÃû½ÐÎļþ¼ÐÃû³ÆµÄhtmlÎļþ¡£AutoWebPluginµÄ¸ü¶à¹¦ÄܼûÎĵµ¡£

´úÂë·Ö¸îÓÅ»¯

Ò»¸öºÃµÄ´úÂë·Ö¸î¶Ôä¯ÀÀÆ÷ÊׯÁЧ¹ûÌáÉýºÜ´ó¡£±ÈÈç¶ÔÓÚ×î³£¼ûµÄreactÌåϵÄã¿ÉÒÔ

Ïȳé³ö»ù´¡¿âreact react-dom redux react-reduxµ½Ò»¸öµ¥¶ÀµÄÎļþ¶ø²»ÊÇºÍÆäËüÎļþ·ÅÔÚÒ»Æð´ò°üΪһ¸öÎļþ£¬ÕâÑù×öµÄºÃ´¦ÊÇÖ»ÒªÄã²»Éý¼¶ËûÃǵİ汾Õâ¸öÎļþÓÀÔ¶²»»á±»Ë¢Ð¡£Èç¹ûÄã°ÑÕâЩ»ù´¡¿âºÍÒµÎñ´úÂë´ò°üÔÚÒ»¸öÎļþÀïÿ´Î¸Ä¶¯ÒµÎñ´úÂë¶¼»áµ¼ÖÂÎļþhashÖµ±ä»¯´Ó¶øµ¼Ö»º´æÊ§Ð§ä¯ÀÀÆ÷ÖØ¸´ÏÂÔØÕâЩ°üº¬»ù´¡¿âµÄ´úÂë¡£ÒÔÉϵÄÅäÖÃΪ£º

// vender.js Îļþ³éÀë»ù´¡¿âµ½µ¥¶ÀµÄÒ»¸öÎļþÀï·ÀÖ¹¸úËæÒµÎñ´úÂ뱻ˢÐÂ
// ËùÓÐÒ³Ãæ¶¼ÒÀÀµµÄµÚÈý·½¿â
// react»ù´¡
import 'react';
import 'react-dom';
import 'react-redux';
// redux»ù´¡
import 'redux';
import 'redux-thunk';
// webpackÅäÖÃ
{
entry: {
vendor: './path/to/vendor.js',
},
}

ÔÙͨ¹ýCommonsChunkPlugin¿ÉÒÔÌáÈ¡³ö¶à¸ö´úÂë¿é¶¼ÒÀÀµµÄ´úÂëÐγÉÒ»¸öµ¥¶ÀµÄchunk¡£ÔÚÓ¦ÓÃÓжà¸öÒ³ÃæµÄ³¡¾°ÏÂÌáÈ¡³öËùÓÐÒ³Ãæ¹«¹²µÄ´úÂë¼õÉÙµ¥¸öÒ³ÃæµÄ´úÂ룬ÔÚ²»Í¬Ò³ÃæÖ®¼äÇл»Ê±ËùÓÐÒ³Ãæ¹«¹²µÄ´úÂë֮ǰ±»¼ÓÔØ¹ý¶ø²»±ØÖØÐ¼ÓÔØ¡£

¹¹½¨npm°ü

demo remd

³ýÁ˹¹½¨¿ÉÔËÐеÄwebÓ¦Óã¬webpackÒ²¿ÉÓÃÀ´¹¹½¨·¢²¼µ½npmÉÏÈ¥µÄ¸ø±ðÈ˵÷ÓõÄjs¿â¡£

const nodeExternals = require('webpack-node-externals');
module.exports = {
entry: {
index: './src/index.js',
},
externals: [nodeExternals()],
target: 'node',
output: {
path: path.resolve(__dirname, '.npm'),
filename: '[name].js',
libraryTarget: 'commonjs2',
},
};

ÕâÀïÓм¸¸öÇø±ðÓÚwebÓ¦Óò»Í¬µÄµØ·½£º

externals: [nodeExternals()]ÓÃÓÚÅųýnode_modulesĿ¼ÏµĴúÂë±»´ò°ü½øÈ¥£¬ÒòΪ·ÅÔÚnode_modulesĿ¼ÏµĴúÂëÓ¦¸Ãͨ¹ýnpm°²×°¡£

libraryTarget: 'commonjs2'Ö¸³öentryÊÇÒ»¸ö¿É¹©±ðÈ˵÷ÓÃµÄ¿â¶ø²»ÊÇ¿ÉÖ´Ðеģ¬Êä³öµÄjsÎļþ°´ÕÕcommonjs¹æ·¶¡£

¹¹½¨·þÎñ¶ËäÖȾ

·þÎñ¶ËäÖȾµÄ´úÂëÒªÔËÐÐÔÚnodejs»·¾³£¬ºÍä¯ÀÀÆ÷²»Í¬µÄÊÇ£¬·þÎñ¶ËäÖȾ´úÂëÐèÒª²ÉÓÃcommonjs¹æ·¶Í¬Ê±²»Ó¦¸Ã°üº¬³ýjsÖ®ÍâµÄÎļþ±ÈÈçcss¡£webpackÅäÖÃÈçÏ£º

module.exports = {
target: 'node',
entry: {
'server_render': './src/server_render',
},
output: {
filename: './dist/server/[name].js',
libraryTarget: 'commonjs2',
},
module: {
rules: [
{
test: /\.js$/,
loader: 'babel-loader',
},
{
test: /\.(scss|css|pdf)$/,
loader: 'ignore-loader',
},
]
},
};

ÆäÖм¸¸ö¹Ø¼üµÄµØ·½ÔÚÓÚ£º

target: 'node' Ö¸Ã÷¹¹½¨³öµÄ´úÂëÊÇÒªÔËÐÐÔÚnode»·¾³Àï

libraryTarget: 'commonjs2' Ö¸Ã÷Êä³öµÄ´úÂëÒªÊÇcommonjs¹æ·¶

{test: /\.(scss|css|pdf)$/,loader: 'ignore-loader'} ÊÇΪÁË·ÀÖ¹²»ÄÜÔÚnodeÀïÖ´ÐзþÎñ¶ËäÖȾҲÓò»ÉϵÄÎļþ±»´ò°ü½øÈ¥¡£

´Ófis3Ç¨ÒÆµ½webpack

fis3ºÍwebpackÓÐÏàËÆµÄµØ·½Ò²Óв»Í¬µÄµØ·½¡£ÏàËÆÔÚÓÚËûÃǶ¼²ÉÓÃcommonjs¹æ·¶£¬²»Í¬ÔÚÓÚµ¼ÈëcssÕâЩ·Çjs×ÊÔ´µÄ·½Ê½¡£fis3ͨ¹ý// @require './index.scss'¶øwebpackͨ¹ýrequire('./index.scss')¡£Èç¹ûÏë´Ófis3ƽ»¬Ç¨ÒƵ½webpack¿ÉÒÔʹÓÃcomment-require-loader¡£±ÈÈçÄãÏëÔÚwebpack¹¹½¨ÊÇʹÓòÉÓÃÁËfis3·½Ê½µÄimuiÄ£¿é£¬ÅäÖÃÈçÏ£º

loaders:[{
test: /\.js$/,
loaders: ['comment-require-loader'],
include: [path.resolve(__dirname, 'node_modules/imui'),]
}]

×Ô¶¨ÒåwebpackÀ©Õ¹

Èç¹ûÄãÔÚÉçÇøÕÒ²»µ½ÄãµÄÓ¦Óó¡¾°µÄ½â¾ö·½°¸£¬ÄǾÍÐèÒª×Ô¼º¶¯ÊÖÁËдloader»òÕßpluginÁË¡£

ÔÚÄã±àд×Ô¶¨ÒåwebpackÀ©Õ¹Ç°ÄãÐèÒªÏëÃ÷°×µ½µ×ÊÇÒª×öÒ»¸öloader»¹ÊÇpluginÄØ£¿¿ÉÒÔÕâÑùÅжϣº

Èç¹ûÄãµÄÀ©Õ¹ÊÇÏë¶ÔÒ»¸ö¸öµ¥¶ÀµÄÎļþ½øÐÐת»»ÄÇô¾Í±àдloaderÊ£ÏµĶ¼ÊÇplugin¡£

ÆäÖжÔÎļþ½øÐÐת»»¿ÉÒÔÊÇÏñ£º

babel-loader°Ñes6ת»»³Ées5

file-loader°ÑÎļþÌæ»»³É¶ÔÓ¦µÄURL

raw-loader×¢ÈëÎı¾ÎļþÄÚÈݵ½´úÂëÀïÈ¥

±àд webpack loader

demo comment-require-loader

±àдloader·Ç³£¼òµ¥£¬ÒÔcomment-require-loaderΪÀý£º

module.exports = function (content) {
return replace(content);
};

loaderµÄÈë¿ÚÐèÒªµ¼³öÒ»¸öº¯Êý£¬Õâ¸öº¯ÊýÒª¸ÉµÄÊÂÇé¾ÍÊÇת»»Ò»¸öÎļþµÄÄÚÈÝ¡£

º¯Êý½ÓÊյIJÎÊýcontentÊÇÒ»¸öÎļþÔÚת»»Ç°µÄ×Ö·û´®ÐÎʽÄÚÈÝ£¬ÐèÒª·µ»ØÒ»¸öеÄ×Ö·û´®ÐÎʽÄÚÈÝ×÷Ϊת»»ºóµÄ½á¹û£¬ËùÓÐͨ¹ýÄ£¿é»¯µ¹ÈëµÄÎļþ¶¼»á¾­¹ýloader¡£´ÓÕâÀï¿ÉÒÔ¿´³öloaderÖ»ÄÜ´¦ÀíÒ»¸ö¸öµ¥¶ÀµÄÎļþ¶ø²»ÄÜ´¦Àí´úÂë¿é¡£Ïë±àд¸ü¸´ÔÓµÄloader¿É²Î¿¼¹Ù·½Îĵµ

±àд webpack plugin

demo end-webpack-plugin

pluginÓ¦Óó¡¾°¹ã·º£¬ËùÒÔÉÔ΢¸´Ôӵ㡣ÒÔend-webpack-pluginΪÀý£º

class EndWebpackPlugin {

constructor(doneCallback, failCallback) {
this.doneCallback = doneCallback;
this.failCallback = failCallback;
}

apply(compiler) {
// ¼àÌýwebpackÉúÃüÖÜÆÚÀïµÄʼþ£¬×öÏàÓ¦µÄ´¦Àí
compiler.plugin('done', (stats) => {
this.doneCallback(stats);
});
compiler.plugin('failed', (err) => {
this.failCallback(err);
});
}
}

module.exports = EndWebpackPlugin;

loaderµÄÈë¿ÚÐèÒªµ¼³öÒ»¸öclass, ÔÚnew EndWebpackPlugin()µÄʱºòͨ¹ý¹¹Ô캯Êý´«ÈëÕâ¸ö²å¼þÐèÒªµÄ²ÎÊý£¬ÔÚwebpackÆô¶¯µÄʱºò»áÏÈʵÀý»¯pluginÔÙµ÷ÓÃpluginµÄapply·½·¨£¬²å¼þÐèÒªÔÚapplyº¯ÊýÀï¼àÌýwebpackÉúÃüÖÜÆÚÀïµÄʼþ£¬×öÏàÓ¦µÄ´¦Àí¡£

webpack plugin ÀïÓÐ2¸öºËÐĸÅÄ

Compiler: ´ÓwebpackÆô¶¯µ½ÍƳöÖ»´æÔÚÒ»¸öCompiler£¬Compiler´æ·Å×ÅwebpackÅäÖÃ

Compilation: ÓÉÓÚwebpackµÄ¼àÌýÎļþ±ä»¯×Ô¶¯±àÒë»úÖÆ£¬Compilation´ú±íÒ»´Î±àÒë¡£

Compiler ºÍ Compilation ¶¼»á¹ã²¥Ò»ÏµÁÐʼþ¡£

webpackÉúÃüÖÜÆÚÀïÓзdz£¶àµÄʼþ¿ÉÒÔÔÚevent-hooksºÍCompilationÀï²éµ½¡£ÒÔÉÏÖ»ÊÇÒ»¸ö×î¼òµ¥µÄdemo£¬¸ü¸´ÔӵĿÉÒԲ鿴 how to write a plugin»ò²Î¿¼web-webpack-plugin¡£

×ܽá

webpackÆäʵºÜ¼òµ¥£¬¿ÉÒÔÓÃÒ»¾ä»°º­¸ÇËüµÄ±¾ÖÊ£º

webpackÊÇÒ»¸ö´ò°üÄ£¿é»¯jsµÄ¹¤¾ß£¬¿ÉÒÔͨ¹ýloaderת»»Îļþ£¬Í¨¹ýpluginÀ©Õ¹¹¦ÄÜ¡£

Èç¹ûwebpackÈÃÄã¸Ðµ½¸´ÔÓ£¬Ò»¶¨ÊǸ÷ÖÖloaderºÍpluginµÄÔ­Òò¡£

 
   
1802 ´Îä¯ÀÀ       28
Ïà¹ØÎÄÕÂ

Éî¶È½âÎö£ºÇåÀíÀôúÂë
ÈçºÎ±àд³öÓµ±§±ä»¯µÄ´úÂë
ÖØ¹¹-ʹ´úÂë¸ü¼ò½àÓÅÃÀ
ÍŶÓÏîÄ¿¿ª·¢"±àÂë¹æ·¶"ϵÁÐÎÄÕÂ
Ïà¹ØÎĵµ

ÖØ¹¹-¸ÄÉÆ¼ÈÓдúÂëµÄÉè¼Æ
Èí¼þÖØ¹¹v2
´úÂëÕû½àÖ®µÀ
¸ßÖÊÁ¿±à³Ì¹æ·¶
Ïà¹Ø¿Î³Ì

»ùÓÚHTML5¿Í»§¶Ë¡¢Web¶ËµÄÓ¦Óÿª·¢
HTML 5+CSS ¿ª·¢
ǶÈëʽC¸ßÖÊÁ¿±à³Ì
C++¸ß¼¶±à³Ì
×îл¼Æ»®
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢ 6-12[ÏÃÃÅ]
È˹¤ÖÇÄÜ.»úÆ÷ѧϰTensorFlow 6-22[Ö±²¥]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 6-30[±±¾©]
ǶÈëʽÈí¼þ¼Ü¹¹-¸ß¼¶Êµ¼ù 7-9[±±¾©]
Óû§ÌåÑé¡¢Ò×ÓÃÐÔ²âÊÔÓëÆÀ¹À 7-25[Î÷°²]
ͼÊý¾Ý¿âÓë֪ʶͼÆ× 8-23[±±¾©]
 
×îÐÂÎÄÕÂ
ÈçºÎÉè¼Æ¸ßÀ©Õ¹µÄÔÚÏßÍøÒ³ÖÆ×÷ƽ̨
electronÈëÃÅÐĵÃ
ʹÓà Electron ¹¹½¨×ÀÃæÓ¦ÓÃ
VUE.JS×é¼þ»¯¿ª·¢Êµ¼ù
ÉîÈëÀí½âJSCore
×îпγÌ
HTML 5 + CSS3 Ô­ÀíÓ뿪·¢Ó¦ÓÃ
Webǰ¶Ë¸ß¼¶¹¤³Ìʦ±Ø±¸¼¼ÄÜʵս
Vue´óÐÍÏîÄ¿¿ª·¢ÊµÕ½
ReactÔ­ÀíÓëʵ¼ù
Vue.js½ø½×Óë°¸Àýʵ¼ù
³É¹¦°¸Àý
Öн»¼¯ÍÅ ¹¹½¨Web×Ô¶¯»¯²âÊÔ¿ò¼Ü
ijָÃûµçÐŹ«Ë¾ Vue.js½ø½×Óë°¸Àý
¹úµçÍ¨ÍøÂç¼¼Êõ HTML5+CSS3 +webǰ¶Ë¿ò
ÒÆ¶¯Í¨ÐÅ ÒÆ¶¯»¥ÁªÍøÓ¦Óÿª·¢Ô­Àí
ijµçÁ¦ÐÐ android¿ª·¢Æ½Ì¨×î¼Ñ