在开发者模式中使用使用webpack-isomorphic-tools

由于webpack-isomorphic-tools

不支持

const webpackMiddleware = require('webpack-dev-middleware');
const webpackHotMiddleware = require('webpack-hot-middleware');
所以我们在做开发者模式的时候,我们的webpack-isomorphic-tools不能和上面的两个中间件同一个进程, 否则webpack-isomorphic-tools会一直等待build任务


这里我们使用并发进程的方式来达到开发者热加载的功能


这里在package.json中的命令, 看看dev的命令就知道整个流程了

    "dev": "concurrent --kill-others \"npm run watch-client\" \"npm run server\"",
    "watch-client": "node ./webpack/webpack-dev-server"

我们看看client的配置

// 开发环境, 主要完成热加载(webpack-isomorphic-tools, 无法跟webpack-dev-middleware共用)
const Express = require('express');
const webpack = require('webpack');
const webpackMiddleware = require('webpack-dev-middleware');
const webpackHotMiddleware = require('webpack-hot-middleware');
const config = require('../src/config/config.js');
const logger = require('../src/server/resource/log4js.js');
const webpackConfig = require('../webpack.config.js');

const app = new Express();
const compiler = webpack(webpackConfig);
const middleware = webpackMiddleware(compiler, {
  publicPath: webpackConfig.output.publicPath,
  contentBase: 'src',
  stats: {
    colors: true,
    hash: false,
    timings: true,
    chunks: false,
    chunkModules: false,
    modules: false
  }
});
app.use(middleware);
app.use(webpackHotMiddleware(compiler));

app.listen(`${config.port + 1}`, function onAppListening(err) {
  if (err) logger.error(err);
  logger.info('Webpack development server listening on port %s', `${config.port + 1}`);
});


看看服务器的配置

const WebpackIsomorphicTools = require('webpack-isomorphic-tools');
const context = require('path').resolve(__dirname, '../../');
const wic = require('../../webpack.isomorphic.config');

// 全局变量
global.WebpackIsomorphicTools = new WebpackIsomorphicTools(wic)
.server(context, () => require('./server'));



跟上一个版本不一样的是这里我们不需要调用development(), 默认是开发者模式, 除非你使用NODE_ENV=production环境变量

然后需要注意的是我们的开发者模式下, 我们使用的是端口加一的方式(就是比server开启的端口多1, 那么我们如何获取client build出来的assert?)


我们需要在webpack的配置里添加publicpath

  output: {
    path: path.join(__dirname, '/dist/'),
    filename: '[name].js',
    publicPath: `http://${config.host}:${config.port + 1}/`
  },



接着我们就可以拿这些assert在我们的服务器端完成渲染了


剩下的可以看看doc


https://github.com/halt-hammerzeit/webpack-isomorphic-tools#what-are-webpack-assetsjson



  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值