Импортированное изображение не получает атрибут SRC, в то время как требуемое изображение получает странное имя

Последующие действия /52443554#52443554">предыдущий вопрос, я обнаружил несколько вещей. Я использую следующие две ссылки (на один и тот же файл).

var Image1 = require("../assets/author.png");
import Image2 from "../assets/author.png";

В методе render() я пытаюсь создать разметку двумя способами.

<img style={imgStyle} src={Image1} />
<img style={imgStyle} src={Image2} />

Вопреки моим ожиданиям, они отображаются по-разному.

<img style="margin: 15px;" src="1e0cf4ef57ac9ab0521646ee9c657eae.png">
<img style="margin: 15px;">

Я не уверен, что с этим делать.

  1. В какое руководство было преобразовано имя файла? Могу ли я контролировать это? Должен ли я вмешиваться в это?

  2. Что происходит с частью src из разметки? Может ли он просто так исчезнуть? Что я могу с этим поделать?

Я добавил файл с определением TypeScript, как показано ниже, чтобы программное обеспечение понимало, что это допустимый тип модуля. Однако не совсем уверен, что он действительно достигает этой цели.

declare module "*.png" {
  const value: any;
  export default value;
}

person DonkeyBanana    schedule 29.09.2018    source источник
comment
Я думаю, что могу ответить на вопрос № 2; Мне придется уступить людям Webpack вопрос № 1. Предположительно, Image2 оценивается как undefined, потому что вы пытаетесь выполнить импорт по умолчанию из модуля, который не имеет экспорта по умолчанию в стиле ES6, и установка атрибута на undefined приводит к тому, что он не добавляется в HTML. Используйте import Image2 = require("../assets/author.png"), чтобы импортировать экспортированное значение в стиле CommonJS, или включите параметр компилятора esModuleInterop.   -  person Matt McCutchen    schedule 30.09.2018
comment
@MattMcCutchen Очень внимательно следите. Вы правы в своем заключении, но ошибаетесь в предположении, которое привело вас к этому (что делает его еще более удивительным). Значение Author действительно равно undefined, поэтому атрибут src следует опустить. Тем не менее, пожалуйста, посмотрите мое редактирование в отношении регистрации модуля (я добавляю его определение в custom.d.ts).   -  person DonkeyBanana    schedule 30.09.2018
comment
Ваш custom.d.ts — это объявление TypeScript, которое используется для проверки типов вашего кода, но не используется во время выполнения. То, что определено во время выполнения, определяется используемым вами загрузчиком Webpack, и я подозреваю, что он создает модуль с назначением экспорта вместо экспорта по умолчанию (поэтому ваше объявление типа неверно в отсутствие esModuleInterop). Попробуйте одно из предложенных мной изменений и посмотрите, не решит ли это проблему. (Если вы попробуете внести изменения в импорт, вам может потребоваться также заменить export default value на export = value в объявлении типа.)   -  person Matt McCutchen    schedule 30.09.2018
comment
@MattMcCutchen Я недостаточно опытен, чтобы играть с Webpack, поэтому решил назначить награду за это. Изменение на require решает видимую проблему, но я хочу понять особенности глубины, поэтому я хочу заставить его вести себя моим способом, который использует import синтаксис. Тем не менее, я хотел бы погуглить, но мне не хватает ключевых слов. Должен ли я сосредоточиться на compilerOptions и esModuleInterop? Другие подсказки?   -  person DonkeyBanana    schedule 30.09.2018
comment
Как я уже сказал, если вы включите esModuleInterop, то import Image2 from "../assets/author.png" должно работать. Это выглядит как хорошее введение в различие между назначениями экспорта и экспортом по умолчанию, которое скрыто esModuleInterop.   -  person Matt McCutchen    schedule 02.10.2018