Webpack, оценивает определенные модули во время компиляции - PullRequest
0 голосов
/ 26 декабря 2018

Я хотел бы создать загрузчик Webpack (или плагин), который позволил бы заменить вызов определенного метода на результат, возвращаемый этим методом во время компиляции.Например, предположим, у меня есть файл с именем transpile_time.js :

import {SomeUsefullStuff} from 'a_very_cool_lib';   //<-- this should be resolved correctly

module.exports = function{
   //let's assume that 'a_very_cool_lib' is used somewhere here
   return 'console.log(\'tralala\')';
}

И у меня есть еще один файл с именем App.ts :

import {default as tt} from './transpile-time';
....
function someFunc(){
  ...
  tt();      // <------ I want this code to be replaced to 
             // 'console.log(\'tralala\')'
             // during the compilation process
}

Для App.js используется мой пользовательский загрузчик.С помощью Esprima и Estraverse и Escodegen я могу манипулировать источниками, но в какой-то момент мне нужно разрешить зависимость

import {default as tt} from './transpile-time';

динамически в моем загрузчике в связи с тем, что он может иметь свои собственные зависимости.В приведенном выше примере

import {SomeUsefullStuff} from 'a_very_cool_lib'; 

должно быть правильно разрешено.Webpack Loader API предлагает метод loadModule , который предоставляет источники и объект модуля.Последний теоретически содержит зависимости с их источниками, и я могу просмотреть их и заменить каждый оператор импорта соответствующим исходным кодом, а затем использовать eval.Но это довольно уродливо, я бы предпочел, чтобы Webpack делал эту работу.Например, есть объект compilation , кажется, что можно вставить несколько хуков, но это не очень хорошо описано.У кого-нибудь есть идея?

PS Я собираюсь использовать все это для разрешения шаблонов и генерации кода.

Обновление : после небольшого исследования того, как Webackработает внутренне ( эта статья была весьма полезна ), я думаю, что было бы лучше использовать плагин вместо загрузчика.И, вероятно, мне не нужны Esprima и другие инструменты, потому что Webpack также создает AST на некотором этапе.Но все же я не знаю, как его использовать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...