У меня есть следующий класс:
class AnalyticsService {
/** Log an analytics event. */
log(options) {
return Promise.all(this.logGoogleAnalytics(options), this.logKenticoAnalytics(options));
}
/** Log an analytics event to GA. */
logGoogleAnalytics(options) {
if (!options || !window.ga) {
console.warn('Analytics: Failed to log event:', options);
return Promise.reject(false);
}
const { category, action, label, value } = options;
ga('send', 'event', category, action, label, value);
return Promise.resolve(true);
}
/** Log an analytics event to Kentico. */
logKenticoAnalytics(options) {
if (!options || !window.ga) {
console.warn('Analytics: Failed to log activity:', options);
return Promise.reject(false);
}
const data = {
...options,
referrer: options.referrer || document.referrer,
url: options.url || location.href,
};
return postJSON(`${URL_VIRTUAL_PATH}/activities`, data).then(
response => {
if (!response.ok) {
console.warn('Analytics: Failed to log activity:', response, options);
return Promise.reject(false);
}
return response.json();
},
error => {
console.warn('Analytics: Failed to log activity:', error, options);
return Promise.reject(false);
},
);
}
}
, который, если я включу в другой файл js с
import AnalyticsService from './AnalyticsService';
, будет компилироваться и работать хорошо.Однако мы пытаемся повторно использовать наши js, экспортируя их в npm, чтобы мы могли npm использовать их в разных проектах.
Это все работало хорошо, но теперь, если я использую
import AnalyticsService from '@jsrepo/analyticsservice/AnalyticsService';
Я получаю ошибку компиляции для синтаксиса распространения:
ERROR in ./~/@jsrepo/analyticsservice/AnalyticsService.js
Module parse failed: C:\Web\SiteFiles\src\node_modules\@jsrepo\analyticsservice\AnalyticsService.js Unexpected token (30:6)
You may need an appropriate loader to handle this file type.
|
| const data = {
| ...options,
| referrer: options.referrer || document.referrer,
| url: options.url || location.href,
@ ./js/components/init-analytics.js 7:24-79
@ ./js/components/index.js
@ ./js/main.js
@ multi webpack/hot/dev-server webpack-hot-middleware/client?reload=true sass/main.scss js/main
Я подумал, что это может быть проблема с зависимостями, поэтому я добавил
"babel-plugin-transform-object-rest-spread": "^6.23.0"
к зависимостям пакета npm, а такжедобавил его в настройки загрузчика babel в конфигурации webpack:
use: {
// Use the babel-loader to transpile the JS to browser-compatible syntax.
loader: 'babel-loader',
options: {
plugins: [require('babel-plugin-transform-object-rest-spread')]
// have also tried adding babel-plugin-transform-es2015-spread
}
},
Но я не могу удалить ошибку.Кто-нибудь знает, как заставить работать синтаксис распространения при импорте пакета npm или как отредактировать его, чтобы он мне не понадобился - в основном я не понимаю эту строку:
const { category, action, label, value } = options;
, чтобыприсваивать любые параметры данным без использования ...