Нам пришлось обновить некоторые зависимости, чтобы переключиться на Webpack 4, и мы получаем предупреждение в webpack и ошибку в браузере при попытке смешать import
и require
в одном проекте.
Мыиметь очень большой проект (300+ файлов) с некоторыми файлами, использующими var Pkg = require('./fileName');
и module.exports = MyComponent
, в то время как другие используют import Pkg from './fileName'
и export default MyComponent
и предпочли бы не проходить каждый из них, используя require/module.exports и обновите их.
предупреждение веб-пакета:
WARNING in ./index.js 15:17-20
"export 'default' (imported as 'App') was not found in './App.jsx'
ошибка браузера:
App.jsx:20 Uncaught TypeError: Cannot assign to read only property 'exports' of object '#<Object>'
at Module.eval (App.jsx:20)
at eval (App.jsx:21)
at Module../App.jsx (bootstrap:83)
at __webpack_require__ (bootstrap:19)
at eval (index.js:2)
at Module../index.js (bootstrap:83)
at __webpack_require__ (bootstrap:19)
at bootstrap:83
at bootstrap:83
версии зависимостей package.json:
"@babel/cli": "^7.2.3",
"@babel/core": "^7.4.4",
"@babel/preset-env": "^7.4.4",
"@babel/preset-react": "^7.0.0",
"babel-loader": "^8.0.5",
"webpack": "^4.31.0",
"webpack-cli": "^3.3.2",
.babelrc
{
"presets": [
"@babel/preset-react",
"@babel/preset-env"
]
}
.browserlistrc
{
"browserslist": [
">0.25%",
"ie 11",
"not op_mini all"
]
}
конфиги webpack:
rules: [
{
test: /\.(js|jsx)$/,
exclude: /node_modules/,
use: [{
loader: 'babel-loader',
options: {
babelrc: true
}
}],
},
// some other rules...
]
index.js
import App from './App'
// Expose App to the window so we can utilize
// it from within <script> tags
window.App = App
App.js
import React from 'react'
import ReactDOM from 'react-dom'
var App = (function () {
return {
route: function (route, properties) {
return ReactDOM.render(
<div>component markup</div>, document.getElementById('workspace')
)
}
}
})()
// This works
// export default App
// This breaks
module.exports = App
index.html
<script>
App.route('login', {some: 'props'});
</script>