babel-loader
по умолчанию не переносит ничего, что находится в node_modules
. Вы можете явно сказать, что переносить в node_modules
, но после @babel7.0.0
это тоже не работает.
есть также область действия .babelrc
, которая была введена в @babel7.0.0
.
согласно исследованию, в котором я провел при нормальных обстоятельствах node_modules
ожидали, что транспортировали commonjs
или umd
модули. которые могут быть импортированы любым приложением. в моем случае мои пакеты / компоненты, где все es6
модули, которые нужно было транспортировать. и моя сборка webpack не удалась, потому что babel-loader
просто игнорировал их.
поэтому я решил использовать @babel/cli
для переноса каждого пакета, в котором находятся мои компоненты, мне пришлось добавить .babelrc
вместе с другими конфигурациями в мои пакеты компонентов и собрать их с помощью @babel/cli
вот это scripts
в моем package.json
"scripts": {
"start": "babel src --watch --out-dir dist --source-maps inline --copy-files --ignore spec.js,spec.jsx"
},
и мой package.json выглядит примерно так после этого
{
"name": "@pkg/components",
"version": "1.0.1",
"description": "a repository for react common components. may or may not be dependent on elements",
"main": "dist/index.js",
"author": "hannad rehman",
"license": "MIT",
"scripts": {
"start": "babel src --watch --out-dir dist --source-maps inline --copy-files --ignore spec.js,spec.jsx"
},
"dependencies": {
"@pkg/constants": "^1.0.1",
"@pkg/elements": "^1.0.1"
},
"peerDependencies": {
"prop-types": "^15.6.2",
"react": "^16.4.2",
"react-router-dom": "^4.3.1"
}
}
с таким подходом. все мои общие пакеты будут протестированы, выровнены и собраны, прежде чем какое-либо приложение сможет их импортировать. babel
имеет режим просмотра, который гарантирует, что транспиляция происходит всегда, когда происходит изменение.
последний и самый важный ответ HMR
работает как положено.
UPDATE
вышеуказанное решение определенно работает, но через несколько месяцев я изменил его, используя свойство include в загрузчике babel
{
test: /\.js(x?)$/,
include: [/node_modules\/@healthifyme/],
use: [
'thread-loader',
{
loader: 'babel-loader',
options: {
cacheDirectory: true,
configFile: path.resolve(
__dirname,
'../../../../',
`${env.appConfig.folderSrc}/babel.config.js`,
),
},
},
],
}