Znalazłem kilka pytań związanych z tym problemem, ale żaden z nich nie pasuje ani nie naprawia mojego problemu.Importowanie modułu stylu UMD za pomocą ES6, Webpack i Babel
Piszę bibliotekę w ES6, która ma być używana w przeglądarce i na serwerze. Znalazłem kilka bibliotek żądań HTTP, które mogą być używane na serwerze lub przeglądarce (popsicle, axios). Z powodzeniem korzystałem z tych bibliotek w obu miejscach, ale mam pewne problemy podczas importowania ich w moim źródle i korzystania z wyjściowego pliku Webpacked.
My ES6 plik źródłowy, gdzie jestem importowania biblioteki axios
jest
import axios from 'axios';
export default {
go: function() {
return axios.get('http://www.google.com');
}
};
Moja WebPack config jest
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;
Jak widać jestem ustawiania libraryTarget do umd
i umdNamedDefine do true
I moja .bablerc
jest
{
"presets": ["es2015"],
"plugins": ["add-module-exports", "babel-plugin-add-module-exports"]
}
jestem w stanie wykorzystać moją bibliotekę w przeglądarce poprzez włączenie go w script
tagu, ale nie jestem w stanie go używać podczas importowania z węzła. Otrzymuję XMLHttpRequest is not defined
. Biblioteka axios mówi, że używa XMLHttpRequest w przeglądarce i http, gdy działa w węźle, ale z jakiegoś powodu nie wykrywa, że jest uruchamiany na serwerze. Mam problem z kilkoma bibliotekami UML, wiec nie jest to specyficzny pakiet. Ponadto, ponieważ mogę używać tych bibliotek w węźle ES5 bez uruchamiania webpacka lub babel, jestem przekonany, że jest to problem z konfiguracją w pakiecie sieci Web.
Jak mogę zaimportować te biblioteki stylów UMD do ES6 i wygenerować bibliotekę z Webpack i Babel, które mogą być używane na serwerze i przeglądarce?
Nie powinieneś używać Webpacka po stronie serwera. To jest rdzeń twojego problemu i nie dotyczy ES6, Babel ani cokolwiek, o czym wspomniałeś. Wypróbuj bez pakietu Web Pack. – blakeembrey
Ale w takim razie w jaki sposób powinienem utworzyć skasowaną bibliotekę, którą następnie mogę opublikować na npm? –
Ty nie. To okropna praktyka. Węzeł nie potrzebuje zminimalizowanych plików, przeglądarki robią. Mineralizacja to zadanie dla bundlerów. Jest wiele powodów, ale dla jednego - rezygnujesz z wersjonowania i zależności (nie możesz teraz odrzucić). Oczywiście możesz używać pakietu Webpack dla kodu węzła, ale upewnij się, że najpierw włączasz tryb węzła. Musisz jednak to sprawdzić. – blakeembrey