【发布时间】:2019-01-10 23:05:28
【问题描述】:
第 1 部分: 在我的主 .js 文件中,我设置了几个快捷功能:
// Selector shortcuts - mimic jQuery style selectors but using more modern, standard code
const $ = ( selector, scope = document ) => scope.querySelector( selector );
const $$ = ( selector, scope = document ) => scope.querySelectorAll( selector );
const on = ( el, type, listener ) => el.addEventListener( type, listener );
第 2 部分:
我正在使用 ES6 模块将我的网站的代码拆分为符合逻辑的、可管理的块。目前我的本地构建设置使用Parcel,我相信它使用 Babel 来转译模块。
这些被导入到定义选择器函数的同一个主 .js 文件中:
// Selector shortcuts - mimic jQuery style selectors but using more modern, standard code
const $ = ( selector, scope = document ) => scope.querySelector( selector );
const $$ = ( selector, scope = document ) => scope.querySelectorAll( selector );
const on = ( el, type, listener ) => el.addEventListener( type, listener );
// Load components
import BGVideo from './BGVideo';
import FieldLabel from './FieldLabel';
// Invoke components
on( document, 'DOMContentLoaded', ( e ) => {
$$( '[data-background-video]' ).forEach( ( el ) => {
new BGVideo( el );
} );
$$( '.c-form__item' ).forEach( ( el ) => {
new FieldLabel( el );
} );
} );
这些在主 .js 文件中工作得很好,但在模块文件中不起作用 - 任何尝试使用它们都会在控制台中触发错误,例如Uncaught ReferenceError: $ is not defined
是否可以在模块文件中访问这些函数,而无需在每个模块的顶部重写它们?
干杯????
【问题讨论】:
-
勾选将 ES6 模块导入全局范围 - stackoverflow.com/questions/35600751/…
-
如何导出选择器函数?
-
@Troopers 对不起,我才意识到我写的问题不是特别好。我已经更新它以清除它。但基本上,选择器函数是在我的主 JS 文件的顶部定义的;在文件的更下方,我将模块导入该文件。
标签: javascript ecmascript-6 es6-modules parceljs