现代JavaScript:侧视图

今天,我试图帮助一个朋友使用他在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。新手可以期望什么?

All Articles