Я пытаюсь написать класс в ES6 и передать его в библиотеку как модуль AMD с Babel (и пакет с jQuery в том же файле), чтобы люди могли использовать его как это:Как экспортировать класс ES6 с помощью Webpack и Babel в AMD
<script src="Foo.js"></script>
<script>
var dummy = new Foo();
</script>
Я последовал за решение here и организовать мою папку так:
-dist
-js
|--Foo.js
|--main.js
-lib
|--jquery.js
-node_modules
-webpack.config.js
-.babelrc
-.eslintrc
-package.json
и Foo.js
:
import $ from '../lib.jquery.js';
export default class Foo {
constructor(){
/* jQuery stuff */
}
}
и main.js
:
module.exports = require('./Foo.js').default;
и webpack.config.js
:
require('babel-polyfill');
const path = require('path');
const webpack = require('webpack');
module.exports = {
name: "bundle-js",
entry: {
Foo: [
// configuration for babel6
'babel-polyfill',
'./js/main.js'
]
},
output: {
path: path.resolve(__dirname, 'dist'), // ./build
filename: '[name].bundle.js',
library: 'Foo',
libraryTarget: 'umd'
},
module: {
rules: [{
test: /\.js$/,
loader: ['babel-loader', 'eslint-loader'],
exclude: /node_modules/,
}]
},
stats: {
colors: true
},
devtool: 'source-map'
};
и .babelrc
:
{
"plugins": ["transform-es2015-modules-amd"],
"presets": ["react", "es2015","stage-0"]
}
И я постоянно получаю эту ошибку:
js/main.js: Property object of MemberExpression expected node to be of a type ["Expression"] but instead got null
Может кто-нибудь, пожалуйста, помогите мне и скажите мне, что пошло не так, и я могу это исправить? AMD больше относится к моим предпочтениям, поэтому, если у кого-то есть решение, которое использует CommonJS и делает то же самое, я открыт для него.
Редактировать: Чтобы избежать отвлечения внимания, эта проблема не имеет ничего общего с Webpack, поскольку я использовал команду babel --presets es2015 --plugins transform-es2015-modules-amd js/main.js -o dist/Foo.bundle.js
и по-прежнему имею ту же ошибку.
Возможно, мне что-то не хватает, но почему вы используете webpack с AMD? Webpack - это * bundler *, а AMD для загрузки асинхронного скрипта ... кажется мне с вашим '.babelrc', что вы можете просто пропустить webpack? –
Поскольку 'Class' является синтаксисом ES6, поэтому я хочу передать его ES5 с помощью babel, поэтому большинство браузеров все еще могут его поддерживать. Я попробовал транспиляцию без использования Webpacj, но с командой 'babel --presets es2015 --plugins transform-es2015-modules-amd js/main.js -o dist/Foo.bundle.js', но она по-прежнему дает мне ту же ошибку. – kevguy
Бросок случайных инструментов сборки при ошибках, которые вы не понимаете, не будет их исправлять. Итак, давайте начнем с самого начала: вы включаете 'require.js' в тег скрипта на своей странице? Как выглядит ваш порядок загрузки? Замечание: если у вас есть '.babelrc', почему вы вручную передаете параметры CLI? И последнее, но не менее важное: если вы намерены опубликовать это как * библиотеку *, вы должны использовать UMD для максимальной простоты использования. –