Как исключить движки Express View из пакета Webpack - PullRequest
0 голосов
/ 20 сентября 2019

Я связываю свое CLI-приложение с помощью Webpack v4.Одна из зависимостей - Express, и это вызывает предупреждение:

WARNING in ./node_modules/express/lib/view.js 81:13-25
Critical dependency: the request of a dependency is an expression
 @ ./node_modules/express/lib/application.js
 @ ./node_modules/express/lib/express.js
 @ ./node_modules/express/index.js

Это происходит из этой строки в Express:

/**
 * Initialize a new `View` with the given `name`.
 *
 * Options:
 *
 *   - `defaultEngine` the default template engine name
 *   - `engines` template engine require() cache
 *   - `root` root path for view lookup
 *
 * @param {string} name
 * @param {object} options
 * @public
 */

function View(name, options) {
  var opts = options || {};

  this.defaultEngine = opts.defaultEngine;
  this.ext = extname(name);

  // ...

  if (!opts.engines[this.ext]) {
    // load engine
    var mod = this.ext.substr(1)
    debug('require "%s"', mod)

    // default engine export
    var fn = require(mod).__express // <-- this require is the problem

Есть довольно много вопросовспрашивая о том, как это исправить, не связывая экспресс вообще, или не связывая что-либо из node_modules.

Для меня это победило быточка (я пытаюсь уменьшить размер развернутого файла), поэтому я хочу исправить это, сохраняя экспресс в моем пакете.В моем случае я вообще не использую движки представления, и это требование существует исключительно для загрузки движков представления по требованию, поэтому я просто хочу, чтобы предупреждение исчезло.

Если я уверен, что это требуетникогда не будет вызван, как я могу сказать, чтобы webpack полностью его игнорировал?

1 Ответ

0 голосов
/ 20 сентября 2019

Возможно, вы могли бы попробовать изменить правила вашего модуля конфигурации webpack так, чтобы view устройство использовало null-loader

Это, конечно, заставит View вернуть null, но если вы никогда не касаетесь представленийэто может быть в порядке.

пример.

rules: [
 {
   test: require.resolve("express/view"),
   use: 'null-loader',
  },
],

Глядя на application

this.set('view', View); надеюсь, просмотр здесь пустым не вызывает проблем.

Единственное другое место View, которое упоминается в приложении, находится в render, которое, как вы говорите, вы не используете.Поэтому скрещенные пальцы не вызовут никаких побочных эффектов.

...