今天,我试图帮助一个朋友使用他在Github上找到的JS模块。我的朋友是一位出色的科学家,但不是JS专家,因为过去六年来我一直在麻省理工学院进行可用性研究和教学,所以我的皮肤因一切混乱而变得白皙。一堆不必要的异常,神秘的错误和缺乏适当的反馈。在我看来,直到他放弃之前,我并没有为他提供太多帮助,以使他在遭受酷刑的那一刻左右所经历的失望中幸免于难。就像这样...注意:包裹和人员名称已更改,以保护其身份。我也省略了一些对于此软件包过于具体的问题。一些错误是从内存中恢复的,所以如果我误解了一些内容,请告诉我。约翰:嘿,我想尝试一下我在Github上找到的算法。他说需要使用什么import functionName packageName
,然后调用functionName()
。一切似乎都很简单!我真的不需要用户界面,因此我将使用Node!我(利亚):当然,Node似乎是一个很好的框架!John npm install packageName --save
按照README的建议启动。然后node index.js
。节点:警告:要加载ES模块,请在package.json中设置“ type”:“ module”或使用.mjs扩展名。
SyntaxError:无法在模块外部使用import语句
约翰:但是我没有任何package.json ...莉亚:运行npm init
它,它会生成它!John启动npm init
,通过安装向导,将其手动添加type: "module"
到生成的package.json中。约翰发射node index.js
。节点:SyntaxError:无法在模块外部使用import语句
奇怪的是,这次项目的内部模块抛出了错误。 WAT?!Leah:好吧,到了地狱,只需在浏览器中运行它,这就是ES6模块,只有一个干净的JS算法,它不使用Node API,它应该可以工作。John用行创建了一个简单的index.html页面,<script type="module" src="index.js">
并将其加载到浏览器中。控制台中没有任何内容。塔达利:是的,您需要配置模块路径才能导入packageName。 Node通过来解决特殊问题node_modules
,因此在浏览器中,您需要自己指定显式路径。John正在查看他的文件,但是那里没有node_modules目录。莉亚:好的,是的,您是npm install
在出现之前就开始做这件事的package.json
,也许这就是重点!再试一次!John再次启动John npm install packageName --save
:哦,现在出现了node_modules目录!John拼命寻找node_modules中的入口点。然后,它会相应地编辑其index.js并重新加载它。Firefox:MIME类型不正确:text / html
Lea:当然,它为您打开file://
!我的朋友,您如何在没有本地主机的时代生活?当前,file://
严格限制使用Javascript 。约翰:但是我为什么...好吧,我将运行一个本地主机。John运行localhost,并在localhost:80 处打开他的index.html 。Firefox:MIME类型不正确:text / html
约翰(叹气)。需要配置本地主机以使用文本/ javascript类型发布JS文件吗?莉亚:什么?没有!他知道。嗯...看一下网络标签。我怀疑他找不到您的模块,因此他返回了404 HTML页面,然后抱怨该页面不是text/javascript
。再次查看node_modules,更正路径。事实证明,VS Code折叠只有一个子目录的目录,因此我们没有注意到这一点。实际上,我认为这对VS Code来说确实是一个很好的可用性改进,它提高了效率,但是它们应该使事情更明显。Firefox:语法错误:缺少),形式参数后
莉亚:什么?这是从源代码包中获取的,这不是您的错。我不明白...我可以看这行吗?John单击导致Lea 错误的行:天哪。这不是Javascript,这是Typescript !!!扩展名为.js !!!约翰:是的,我只想运行一行代码来测试该算法……约翰放弃了。他总结说,最好不要接触Node,npm或ES6模块。结束。请注意,约翰是一位计算机科学家,他对网络了解很多:他安装了Node&npm,他知道什么是MIME类型,可以在需要时启动localhost。新手可以期望什么?