Я нашел несколько вопросов StackOverflow, связанных с этим, но ни один из них не соответствует моей проблеме и не решает ее.
Я пишу библиотеку на ES6, предназначенную для использования в браузере и на сервере. Я нашел несколько библиотек HTTP-запросов, которые можно использовать на сервере или в браузере (эскимо, axios). Я успешно использовал эти библиотеки в обоих местах, но у меня возникли некоторые проблемы при их импорте в исходный код и использовании выходного файла в формате webpack.
Мой исходный файл ES6, в который я импортирую библиотеку axios
,
import axios from 'axios';
export default {
go: function() {
return axios.get('http://www.google.com');
}
};
Моя конфигурация веб-пакета
var webpack = require('webpack');
var UglifyJsPlugin = webpack.optimize.UglifyJsPlugin;
var WebpackNotifierPlugin = require('webpack-notifier');
var path = require('path');
var env = require('yargs').argv.mode;
var libraryName = 'library';
var source = '/src/test.js';
var plugins = [],
outputFile;
if (env === 'build') {
plugins.push(new UglifyJsPlugin({
minimize: true
}));
outputFile = libraryName + '.min.js';
} else {
outputFile = libraryName + '.js';
plugins.push(new WebpackNotifierPlugin())
}
var config = {
entry: __dirname + source,
devtool: 'source-map',
output: {
path: __dirname + '/lib',
filename: outputFile,
library: libraryName,
libraryTarget: 'umd',
umdNamedDefine: true
},
externals: {},
module: {
loaders: [{
test: /(\.jsx|\.js)$/,
loader: 'babel',
exclude: /(node_modules|bower_components)/
}, {
test: /(\.jsx|\.js)$/,
loader: "eslint-loader",
exclude: /node_modules/
}]
},
resolve: {
root: path.resolve('./src'),
extensions: ['', '.js']
},
plugins: plugins
};
module.exports = config;
Как видите, я устанавливаю для libraryTarget значение umd
, а для umdNamedDefine значение true
.
А мой .bablerc
{
"presets": ["es2015"],
"plugins": ["add-module-exports", "babel-plugin-add-module-exports"]
}
Я могу использовать свою библиотеку в браузере, включив ее в тег script
, но я не могу использовать ее при импорте с помощью node. Я получаю XMLHttpRequest is not defined
. Библиотека axios говорит, что использует XMLHttpRequest в браузере и http при работе в узле, но по какой-то причине она не обнаруживает, что она запускается на сервере. У меня возникают проблемы с несколькими библиотеками UML, поэтому считаю, что это не конкретный пакет. Кроме того, поскольку я могу использовать эти библиотеки в узле ES5 без запуска webpack или babel, я предположил, что это проблема конфигурации с webpack.
Как я могу импортировать эти библиотеки стиля UMD в ES6 и создать библиотеку с помощью Webpack и Babel, которую можно использовать на сервере и в браузере?