Я нашел несколько вопросов StackOverflow, связанных с этим, но ни один из них не соответствует и не устраняет мою проблему.Импорт модуля стиля UMD с ES6, Webpack и Babel
Я пишу библиотеку в ES6, предназначенную для использования в браузере и на сервере. Я нашел несколько библиотек запросов HTTP, которые можно использовать на сервере или в браузере (popsicle, axios). Я успешно использовал эти библиотеки в обоих местах, но у меня есть некоторые проблемы при импорте их в исходный код и с использованием выведенного файла с веб-упаковкой.
Мой ES6 исходный файл, где я импортировать axios
библиотеку,
import axios from 'axios';
export default {
go: function() {
return axios.get('http://www.google.com');
}
};
Мой WebPack конфигурации является
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
, но я не могу ее использовать при импорте с узлом. Я получаю XMLHttpRequest is not defined
. В библиотеке axios говорится, что он использует XMLHttpRequest, когда в браузере и http при запуске в узле, но по какой-то причине он не обнаруживает, что он запускается на сервере. У меня возникли проблемы с несколькими библиотеками UML, поэтому верьте, что это не конкретный пакет. Кроме того, поскольку я могу использовать эти библиотеки в узле ES5 без запуска webpack или babel, мне кажется, что это проблема конфигурации с webpack.
Как импортировать эти библиотеки стилей UMD в ES6 и создать библиотеку с Webpack и Babel, которые можно использовать на сервере и в браузере?
Вы не должны использовать Webpack на стороне сервера. Это ядро вашей проблемы и не связано с ES6 или Babel или с чем-либо еще, что вы упомянули. Попробуйте без Webpack. – blakeembrey
Но тогда как мне создать мини-библиотеку, которую я могу опубликовать до npm? –
У вас нет. Это ужасная практика. Узел не нуждается в мини-файлах, браузеры. Минирование - это работа для поставщиков. Для этого есть много причин, но для одного - вы отказываетесь от версий и зависимостей (вы не можете дедупировать сейчас). Конечно, вы можете использовать Webpack для кода узла, но сначала убедитесь, что вы активируете режим узла. Но вам придется искать его. – blakeembrey