جافا سكريبت - إضافة تبعية في مكون ويب باك


هل من الممكن إضافة تبعية من داخل مكون Webpack إضافي؟ أنا أقوم بإنشاء ملفات تستخدم القوالب، وعندما تتغير هذه القوالب أود أن يقوم webpack --watch بتحفيز بناء آخر.

إليك الإضافة:

function BlahPlugin (options) { this.options = options; }

BlahPlugin.prototype.apply = function (compiler) {

  // This is the file that I'd like to "watch"
  var template = this.options.template;

  compiler.plugin('emit', function (compilation, callback) {
    var body = Object.keys(compilation.assets).join("\n");
    require("fs").readFile(template, "utf8", function (err, data) {
      var content = data.replace("{{body}}", body);
      compilation.assets["out.txt"] = {
        source: function () { return content; },
        size:   function () { return content.length; }
      };
      callback();
    });
  });
};

module.exports = BlahPlugin;

هذا مأخوذ من هذا المشروع الكامل العامل: https://gist.github.com/thatismatt/519d11b2c902791bb74b

إذا قمت بتشغيل ./node_modules/.bin/webpack --watch وقمت بتعديل ملف js يتم تشغيل التجميع تلقائيًا وينتج ملفات js المجمعة و out.txt (كما هو محدد في BlahPlugin). ولكن إذا قمت بتغيير ملف tmpl.txt، الذي تم تحديده في إعدادات webpack ويُستخدم في BlahPlugin، فإن التجميع لا يتم إعادة تشغيله. (وهذا متوقع). ولكن هذا هو ما أريد أن يحدث، كيف يمكنني إخبار Webpack بـ"مراقبة" هذا الملف؟

الإجابة رقم 1

لقد قمت بإصلاح هذا عن طريق إضافة ما يلي:

compiler.plugin("emit", function (compilation, callback) {
  compilation.fileDependencies.push(path.join(compiler.context, template));
  // ...
});

لقد قمت أيضًا بتحديث الملخص، لذا يمكنك رؤية الإصلاح الكامل هناك: https://gist.github.com/thatismatt/519d11b2c902791bb74b

ملاحظة: هذا يعمل لكنه نوع من الحيلة.