webpack не может найти модуль, если файл с именем jsx
как я пишу webpack.конфиг.Яш такой
module.exports = {
entry: './index.jsx',
output: {
filename: 'bundle.js'
},
module: {
loaders: [{
test: /.jsx?$/,
exclude: /node_modules/,
loader: 'babel',
query: {
presets: ['es2015', 'react']
}
}]
}
};
и index.jsx
я импортирую a react
модуль App
import React from 'react';
import { render } from 'react-dom';
import App from './containers/App';
let rootElement = document.getElementById('box')
render(
<App />,
rootElement
)
я нахожу, если я назвал модуль приложение в App.jsx
, тогда webpack скажет в index.jsx
не удается найти модуль App
, но если я назвал именованный модуль приложения в App.js
, он найдет этот модуль и будет работать хорошо.
Итак, я в замешательстве об этом. В моем webpack.config.js
Я написал test: /.jsx?$/
чтобы проверить файл, но почему им *.jsx
не может быть нашли?
4 ответа:
Webpack не знает, чтобы решить
.jsx
неявно файлов. Вы можете указать расширение файла в приложении (import App from './containers/App.jsx';
). Ваш текущий тестовый загрузчик говорит, чтобы использовать загрузчик Бабель, когда вы явно импортировать файл с расширением jsx.или, вы можете включить
.jsx
в расширениях, которые webpack должен разрешить без явного объявления:module.exports = { entry: './index.jsx', output: { filename: 'bundle.js' }, module: { loaders: [{ test: /\.jsx?$/, exclude: /node_modules/, loader: 'babel', query: { presets: ['es2015', 'react'] } }] }, resolve: { extensions: ['', '.js', '.jsx'], } };
для Webpack 2 оставьте пустое расширение.
resolve: { extensions: ['.js', '.jsx'] }
добавление к вышеуказанному ответу,
The разрешить Свойства, где вы должны добавить все типы файлов, которые вы используете в вашем приложении.
Предположим, вы хотите использовать .jsx или. es6 файлы, которые вы можете с радостью включить их здесь, и webpack разрешит их:
resolve: { extensions: ["", ".js", ".jsx" ".es6"] }
Если вы добавляете расширения в разрешить свойство вы можете удалить их из импорта заявление:
import Hello from './hello';// Extensions removed import World from './world';
другие сценарии, например, если вы хотите, чтобы сценарий кофе был обнаружен, вы должны настроить свой тест собственность, а также как:
// webpack.config.js module.exports = { entry: './main.js', output: { filename: 'bundle.js' }, module: { loaders: [ { test: /\.coffee$/, loader: 'coffee-loader' }, { test: /\.js$/, loader: 'babel-loader', query: { presets: ['es2015', 'react'] } } ] }, resolve: { // you can now require('file') instead of require('file.coffee') extensions: ['', '.js', '.json', '.coffee'] } };
убедитесь, что пакет.js генерируется без ошибок (проверьте журнал запуска задач).
Я получал "не могу найти модуль, если файл с именем jsx" из-за синтаксической ошибки в html в компоненте функции рендеринга.
в интересах читаемости и копирования-вставки кодирования. Вот ответ webpack 4 от мистер Роджерс комментарий в этой теме.
module: { rules: [ { test: /\.(js|jsx)$/, exclude: /node_modules/, resolve: { extensions: [".js", ".jsx"] }, use: { loader: "babel-loader" } }, ] }