Не экспортируется класс(модуль)
Файл модуля:
import typeIs from './helpers/typeIs';
/**
* @description Class of checking and throwing a custom exception.
*/
export default class Inspector {
// Some code
}
В package.json указал путь к файлу:
{
// ....
"main": "dist/app.js",
// ...
}
Устанавливаю пакет локально командой npm install ../ДИРЕКТОРИЯ ПАКЕТА/. Всё устанавливается, но консолю модуль, а там {}. В чём может быть проблема?
UPD
Возвращает пустой объект именно в минифицированном файле(dist/app.js). А если подключить исходник - работает.
.babelrc:
{
"presets": ["@babel/preset-env"],
"env": {
"test": {
"plugins": ["transform-es2015-modules-commonjs"]
}
}
}
package.json:
"devDependencies": {
"@babel/core": "^7.10.5",
"@babel/preset-env": "^7.10.4",
"babel-eslint": "^10.1.0",
"babel-jest": "^26.1.0",
"babel-loader": "^8.1.0",
"babel-plugin-transform-es2015-modules-commonjs": "^6.26.2",
"clean-webpack-plugin": "^3.0.0",
"cross-env": "^7.0.2",
"eslint": "^7.5.0",
"eslint-config-google": "^0.14.0",
"eslint-loader": "^4.0.2",
"jest": "^26.1.0",
"webpack": "^4.44.0",
"webpack-cli": "^3.3.12"
},
"browserslist": "> 0.25%, not dead",
"dependencies": {
"@babel/polyfill": "^7.10.4"
}
UPD 2
Сам пакет: https://github.com/doox911/inspector
UPD 3
Проверяю так:
const Inspector = require('inspector-with-exceptions');
console.dir(Inspector);
Ответы (1 шт):
Автор решения: doox911
→ Ссылка
Так как Webpack по умолчанию не подразумевает создание пакета(библиотеки), то это необходимо указать в файле конфигурации. Указывается это свойствами output.library и output.libraryTarget. Правильный файл конфигурации:
const PATH = require('path');
// Автоочистка dist
const {CleanWebpackPlugin} = require('clean-webpack-plugin');
// Наименование итоговых файлов в dist
const APPLICATION_FILE_NAME = 'app';
const IS_PRODUCTION = process.env.NODE_ENV === 'production';
const IS_DEVELOPMENT = !IS_PRODUCTION;
/**
* Получить имя файла
*
* @param {string} exception
* @return {string}
*/
const getFileName = exception => {
return APPLICATION_FILE_NAME + '.' + exception;
};
/**
* Установить loaders
*
* @description Влючая ESLint
* @return {[{loader: string, options: {presets: [string]}}]}
*/
const getLoaders = () => {
const loaders = [
{
loader: 'babel-loader',
options: {
presets: ['@babel/preset-env'],
},
},
];
if (IS_DEVELOPMENT) {
loaders.push('eslint-loader');
}
return loaders;
};
module.exports = {
// Все исходники
context: PATH.resolve(__dirname, 'src'),
// Режим по умолчанию
mode: 'development',
// Входные точки для приложения
entry: ['@babel/polyfill', './index.js'],
output: {
filename: getFileName('js'),
path: PATH.resolve(__dirname, 'dist'),
// Имя пакета
library: 'Inspector',
// Параметры экспорта
libraryTarget: 'commonjs2',
},
plugins: [
new CleanWebpackPlugin,
],
module: {
rules: [
{
test: /\.js$/,
exclude: /node_modules/,
use: getLoaders(),
},
],
},
};