今天我在帮助一位朋友,他是一位伟大的计算机科学家,但不是JS人。因为在过去的6年里,我的日常工作是在麻省理工学院做可用性研究和教学,所以我忍不住对这份工作的繁琐感到畏缩。瞧,一堆不必要的错误条件,隐晦的错误,以及缺乏适当的反馈。在他放弃之前的一个小时左右,我觉得我没有很好地传达他所经历的挫折感。
注意:N个包和人员已更改,以保护其身份。我还省略了他面临的几个问题,这些问题对于手头的一揽子计划来说太具体了。
约翰:嘿,我想试试我在Github上找到的这个算法,它说从PackageName中使用import functionName,然后调用functionName(参数)。看起来很简单!我并不真的需要UI,所以我将使用Node!
John运行NPM install PackageName--按照软件包自述文件的建议保存John run node index.js。
警告:要加载ES模块,请在Package.json中设置";键入";:";module";或使用.mjs扩展名。语法错误:不能在模块之外使用IMPORT语句。
约翰:但是我没有包裹。json…。Lea:运行NPM init,它会为您生成它!
John运行NPM init,完成向导,手动将类型:";module";添加到生成的Package.json中。John运行节点index.js。
奇怪的是,这一次错误是从项目的内部模块抛出的。什么?!
Lea:好的,去它的,只要在浏览器中运行它,它是一个ES6模块,它只是一个纯粹的JS算法,不使用任何NodeAPI,它应该可以工作。
John用<;script type=";module";src=";index.js";>;制作了一个简单的index.html,>;John在浏览器中加载index.html。
Lea:哦,您需要调整您的模块路径来导入PackageName。NODE根据NODE_MODULES执行特殊的解析工作,现在您在浏览器中,您需要自己指定一个显式路径。
Lea:哦,您在有包之前就运行了NPM安装。json,可能就是这样!再试一次!
John拼命地在node_module中查找入口点John相应地编辑他的index.js,重新加载index.html。
莉亚:哦,你在file://!伙计,这些天没有本地主人你在做什么?JavaScript目前在file://中受到严格限制。
约翰:但是我为什么要…呢?好吧,好吧,我要开始做一个本地主持人了。
约翰:叹息。我需要配置我的localhost来提供text/javascript MIME类型的JS文件吗?莉亚:什么?不!它知道这一点。Um…。看看Networks选项卡,我怀疑它找不到您的模块,所以它返回了404的HTML页面,然后它会抱怨,因为错误页面的MIME类型不是text/javascript。
再次查看node_module,更正路径。原来VS代码折叠的文件夹只有一个子文件夹,这就是我们没有注意到的原因。
FWIW我确实认为这对VS代码来说是一个很好的可用性改进,它提高了效率,但他们需要让人们更清楚地看到这就是已经发生的事情。
莉亚:什么?那是来自包裹来源,不是你的错。我不明白…。我们能看看这条线吗?
莉亚:哦,我的天哪。这不是Javascript,这是打字稿!!扩展名为.js!!约翰:我只想运行一行代码来测试这个算法…。😭。
约翰放弃了。结论是切勿使用插接杆接触节点、NPM或ES6模块。
请注意,John是一位对Web相当了解的计算机科学家:他安装了Node&;NPM,他知道什么是MIME类型,他可以在需要的时候启动本地主机。真正的新手还有什么希望呢?