Javascript 导出默认值也是导出导出函数正在使用的代码

Javascript 导出默认值也是导出导出函数正在使用的代码,javascript,module,ecmascript-6,mocha.js,chai,Javascript,Module,Ecmascript 6,Mocha.js,Chai,我有这个功能: // menuAnimate() adds/removes the classes for the mobile menu animation export default function menuAnimate() {...} 我正在将其导入我的mocha测试文件,如下所示: import { menuAnimate } from '../src/scripts/nav'; 但是,当我运行一个涉及menuAnimate的测试时,我得到一个错误,该错误: /Users/jo

我有这个功能:

// menuAnimate() adds/removes the classes for the mobile menu animation
export default function menuAnimate() {...}
我正在将其导入我的mocha测试文件,如下所示:

import { menuAnimate } from '../src/scripts/nav';
但是,当我运行一个涉及
menuAnimate
的测试时,我得到一个错误,该错误:

/Users/johnsoct/Dropbox/Development/andybeverlyschool/src/scripts/nav.js:67
navToggle.addEventListener('click', menuAnimate);

TypeError: Cannot read property 'addEventListener' of null
此错误将从
nav.js
中较低的代码中抛出

navToggle.addEventListener('click', menuAnimate);
如何仅导出功能块

import { menuAnimate } from '../src/scripts/nav';
表示“导入此文件,并让我从中访问一个函数”。不能只导入文件的一部分。如果不希望该文件中的其他内容运行,则应将代码拆分为两个单独的文件,或者重新构建代码,使其在加载文件时不运行

navToggle.addEventListener('click', menuAnimate);
特别是在加载文件时,我从未期望执行这样的操作。如果需要绑定一个侦听器,应该从模块中导出一个函数,然后在实际需要绑定侦听器时调用该函数。e、 g

export function initNav() {
    var navToggle = ...
    navToggle.addEventListener('click', menuAnimate);
}
一个模块的顶级范围应该有自己的最小逻辑。单独加载模块并不像添加事件侦听器那样会产生副作用。几乎只有在初始应用程序JS文件中才会出现这种情况

另外,正如在评论中提到的,因为你

export default ...
你会想做的

import menuAnimate from 
或者保留您的
导入

export function menuAnimate() {...}
没有
默认值

表示“导入此文件,并让我从中访问一个函数”。不能只导入文件的一部分。如果不希望该文件中的其他内容运行,则应将代码拆分为两个单独的文件,或者重新构建代码,使其在加载文件时不运行

navToggle.addEventListener('click', menuAnimate);
特别是在加载文件时,我从未期望执行这样的操作。如果需要绑定一个侦听器,应该从模块中导出一个函数,然后在实际需要绑定侦听器时调用该函数。e、 g

export function initNav() {
    var navToggle = ...
    navToggle.addEventListener('click', menuAnimate);
}
一个模块的顶级范围应该有自己的最小逻辑。单独加载模块并不像添加事件侦听器那样会产生副作用。几乎只有在初始应用程序JS文件中才会出现这种情况

另外,正如在评论中提到的,因为你

export default ...
你会想做的

import menuAnimate from 
或者保留您的
导入

export function menuAnimate() {...}

如果没有
默认值

,我认为这是不可能的。你能把你不想运行的代码注释掉吗?顺便说一句,这不是导入默认值的方式export@AndrewLi那么,您如何导入默认导出?@ChrisJohnson对于默认导出,请删除导入周围的括号:
import menuAnimate from'…
@ChrisJohnson默认导出没有括号。如果导出多个对象,然后导入它们,则使用括号,称为命名导出,例如
function foo(){};函数条(){};出口{foo,bar}然后导入它:
从“…”导入{foo,bar}
foo
bar
在这里被命名为导出。我不认为这是可能的。你能把你不想运行的代码注释掉吗?顺便说一句,这不是导入默认值的方式export@AndrewLi那么,您如何导入默认导出?@ChrisJohnson对于默认导出,请删除导入周围的括号:
import menuAnimate from'…
@ChrisJohnson默认导出没有括号。如果导出多个对象,然后导入它们,则使用括号,称为命名导出,例如
function foo(){};函数条(){};出口{foo,bar}然后导入它:
从“…”导入{foo,bar}
foo
bar
在这里被命名为导出。更多信息请访问。嘿,谢谢你的回答!我真的很感激你在加载文件时加入“似乎是我从来没想过要执行的事情。如果你需要绑定一个侦听器,你应该从你的模块中导出一个函数来完成它,然后在你真正想要绑定该侦听器时调用该函数。例如”comment!我还在学习!我完全同意这个答案+1.嘿,谢谢你的回答!我真的很感激你在加载文件时加入“似乎是我从来没想过要执行的事情。如果你需要绑定一个侦听器,你应该从你的模块中导出一个函数来完成它,然后在你真正想要绑定该侦听器时调用该函数。例如”comment!我还在学习!我完全同意这个答案+1.