提交 4dc1487f224be1f1333dc262d3ee39cf20679165

作者 fanwh
0 个父辈

no message

  1 +node_modules
\ No newline at end of file
... ...
  1 +'use strict';
  2 +
  3 +module.exports = function (app) {
  4 + app.config.coreMiddleware.unshift('webpackDevMiddleware')
  5 +}
\ No newline at end of file
... ...
  1 +'use strict';
  2 +
  3 +const webpack = require('webpack')
  4 +const webpackMiddleware = require('../../lib/webpack-middleware')
  5 +
  6 +module.exports = function (options, app) {
  7 + // 获取配置文件路径
  8 + const configPath = options.config
  9 + // 读取配置文件
  10 + const webpackConfig = require(configPath)
  11 +
  12 + // 构造中间件generator
  13 + return webpackMiddleware(webpack(webpackConfig), {
  14 + noInfo: options.noInfo,
  15 + quiet: options.quiet,
  16 + lazy: options.lazy,
  17 + watchOptions: options.watchOptions,
  18 + publicPath: options.publicPath || webpackConfig.output.publicPath,
  19 + headers: options.headers,
  20 + stats: options.stats,
  21 + hotConfig: options.hotConfig
  22 + }, {
  23 + waitUntilValid: function () {
  24 + app.logger.info('[plugin:webpackDevMiddleware] webpack dev server ready')
  25 + }
  26 + })
  27 +}
\ No newline at end of file
... ...
  1 +/* eslint valid-jsdoc: "off" */
  2 +'use strict';
  3 +module.exports = webpackDevMiddleware => {
  4 +
  5 + /**
  6 + * 默认配置
  7 + */
  8 + const config = exports = {
  9 + // config: 'path/to/webpack/config/file',
  10 + publicPath: '/',// 绑定中间件的公共路径
  11 + noInfo: false,// 显示无信息到控制台(仅警告和错误)
  12 + quiet: false,// 向控制台显示任何内容
  13 + lazy: false,// 切换到延迟模式 这意味着没有观看,而是重新编译每个请求
  14 + watchOptions: {
  15 + aggregateTimeout: 300,
  16 + poll: true
  17 + },// watch options (only lazy: false)
  18 + headers: { 'X-Custom-Header': 'yes' },// 自定义标题
  19 + stats: {// 用于形成统计信息的选项
  20 + colors: true,
  21 + chunks: false
  22 + },
  23 + hotConfig: {
  24 + publicPath: '/',// 绑定中间件的公共路径
  25 + // path: '__webpack_hmr',
  26 + log: false,
  27 + heartbeat: 2000
  28 + }
  29 + };
  30 + return {
  31 + ...config
  32 + };
  33 +};
  34 +
... ...
  1 +'use strict';
  2 +
  3 +const expressMiddleware = require('webpack-dev-middleware')
  4 +const webpackHotMiddleware = require('webpack-hot-middleware')
  5 +
  6 +function middleware(doIt, req, res) {
  7 + const originalEnd = res.end
  8 +
  9 + return function (done) {
  10 + res.end = function () {
  11 + originalEnd.apply(this, arguments);
  12 + done(null, 0)
  13 + }
  14 + doIt(req, res, function () {
  15 + done(null, 1)
  16 + })
  17 + }
  18 +}
  19 +
  20 +module.exports = function (compiler, option, callbacks) {
  21 + const doIt = expressMiddleware(compiler, option);
  22 + var action = webpackHotMiddleware(compiler, option.hotConfig);
  23 + for (const key in callbacks) {
  24 + const exist = doIt[key] && typeof doIt[key] === 'function'
  25 + exist && doIt[key].call(doIt, callbacks[key])
  26 + }
  27 +
  28 + return function* (next) {
  29 + const ctx = this
  30 + const req = this.req
  31 + const res = this.res
  32 + const runNext = yield middleware(doIt, req, {
  33 + end: function (content) {
  34 + ctx.body = content
  35 + },
  36 + setHeader: function () {
  37 + ctx.set.apply(ctx, arguments)
  38 + },
  39 + });
  40 + const nextStep = yield middleware(action, req, res);
  41 + if (runNext && nextStep && next) {
  42 + yield* next
  43 + }
  44 + }
  45 +}
\ No newline at end of file
... ...
此 diff 太大无法显示。
  1 +{
  2 + "name": "alice-webpack-dev-middleware",
  3 + "version": "1.0.0",
  4 + "description": "",
  5 + "private": true,
  6 + "eggPlugin": {
  7 + "name": "webpackDevMiddleware"
  8 + },
  9 + "engines": {
  10 + "node": ">=10.0.0"
  11 + },
  12 + "author": "",
  13 + "license": "MIT",
  14 + "dependencies": {
  15 + "webpack": "^4.42.0",
  16 + "webpack-dev-middleware": "^3.7.2",
  17 + "webpack-hot-middleware": "^2.25.0"
  18 + }
  19 +}
... ...
注册登录 后发表评论