node index.js
或者 npm run dev
啓動 Egg應用app.react.render = (name, locals, options) => { const filePath = path.isAbsolute(name) ? name : path.join(app.config.view.root[0], name); const promise = app.webpack.fileSystem.readWebpackMemoryFile(filePath, name); return co(function* () { const code = yield promise; if (!code) { throw new Error(`read webpack memory file[${filePath}] content is empty, please check if the file exists`); } // dynamic execute javascript const wrapper = NativeModule.wrap(code); vm.runInThisContext(wrapper)(exports, require, module, __filename, __dirname); const reactClass = module.exports; if (options && options.markup) { return Promise.resolve(app.react.renderToStaticMarkup(reactClass, locals)); } return Promise.resolve(app.react.renderToString(reactClass, locals)); }); };
app.messenger.sendToAgent
發送文件名給Agent進程, 同時經過 app.messenger.on
啓動監聽監聽agent發送過來的消agent.messenger.sendToApp
把文件內容發送給Worker進程頁面能夠直接使用 /public/client/js/vendor.js
相對路徑, /public/client/js/vendor.js
由後端框架代理轉發到webpack編譯服務, 而後返回內容給後端框架, 這裏涉及兩個應用通訊. 以下:javascript
<link rel="stylesheet" href="/public/client/css/home/android/home.css">
<script type="text/javascript" src="/public/client/js/vendor.js"></script> <script type="text/javascript" src="/public/client/js/home.js"></script>
頁面必須使用 http://127.0.0.1:9000/public/client/js/vendor.js
絕對路徑css
<link rel="stylesheet" href="http://127.0.0.1:9000/public/client/css/home/android/home.css">
<script type="text/javascript" src="http://127.0.0.1:9000/public/client/js/vendor.js"></script> <script type="text/javascript" src="http://127.0.0.1:9000/public/client/js/home.js"></script>
其中 http://127.0.0.1:9000 是 Agent裏面啓動的Webpack編譯服務地址, 與Egg應用地址是兩回事html
manfifest.json
文件注入 jss/css資源依賴注入