これに関連するいくつかのStackOverflow質問が見つかりましたが、一致するものも問題も解決しません。ES6、Webpack、およびBabelを使用したUMDスタイルモジュールのインポート
私は、ブラウザとサーバーで使用するためのライブラリをES6に作成しています。サーバーやブラウザ(popsicle、axios)で使用できるいくつかのHTTPリクエストライブラリが見つかりました。私は正常に両方の場所でこれらのライブラリを使用しているが、私のソースでそれらをインポートし、出力webpackedファイルを使用していくつかの問題を抱えています。
私はaxios
ライブラリをインポートしています
マイES6ソースファイルが
import axios from 'axios';
export default {
go: function() {
return axios.get('http://www.google.com');
}
};
あなたは私がtrue
umd
とumdNamedDefineにlibraryTargetを設定しています見ることができるように私の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;
です
私の.bablerc
は
{
"presets": ["es2015"],
"plugins": ["add-module-exports", "babel-plugin-add-module-exports"]
}
script
タグにブラウザを含めて使用することはできますが、ノードとのインポート時には使用できません。私はXMLHttpRequest is not defined
を得る。 Axiosライブラリは、ブラウザではXMLHttpRequestを使用し、ノードではhttpを実行するとhttpを使用しますが、何らかの理由でサーバー上で実行されていることを検出していません。私はいくつかのUMLライブラリでこの問題を抱えていますので、特定のパッケージではないと思います。また、webpackやbabelを実行しないでES5ノードでこれらのライブラリを使用できるので、webpackの設定上の問題であると推測されます。
これらのUMDスタイルライブラリをES6で読み込み、サーバーとブラウザで使用できるWebpackとBabelでライブラリを生成するにはどうすればよいですか?
サーバー側でWebpackを使用しないでください。これはあなたの問題の中核であり、ES6やBabelやあなたが言及した何かには関係しません。 Webpackなしで試してみてください。 – blakeembrey
しかし、次にnpmに公開できるミニライブラリをどのように作成すればよいですか? –
あなたはしません。それはひどい練習です。ノードは、ブラウザが行う、縮小されたファイルを必要としません。細分化はバンドル業者の仕事です。これにはたくさんの理由がありますが、バージョン管理と依存関係から除外しています(今は重複排除できません)。もちろん、ノードコードにはWebpackを使用できますが、まずノードモードを有効にしてください。あなたはそれを見なければならないでしょう。 – blakeembrey