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资源依赖注入