出新系列:Vue2、Vue3技能书有梦,干货,微信搜索【大千世界】关注这位大清早还在洗碗的洗碗智慧。本文已收录到GitHubhttps://github.com/qq449245884/xiaozhi,里面有完整的测试站点、资料和我的一线厂商访谈系列文章。ECMAScript模块系统(import和export关键字)默认只能导入JavaScript代码。但是,将应用程序的配置保存在JSON文件中通常很方便,因此我们可能希望将JSON文件直接导入到ES模块中。commonjs模块格式早就支持导入JSON。好消息是,第三阶段的一项名为JSONModules的新提案提出了一种将JSON导入ES模块的方法。现在,让我们看看JSON模块是如何工作的。1.导入config.json。假设我们有一个config.json文件,内容如下:{"name":"MyApplication","version":"v1.2"}如何将config.json导入到ES模块中?例如,让我们创建一个简单的Web应用程序,它显示来自JSON配置文件的应用程序名称和版本。如果您尝试直接导入config.json,Node.js将抛出错误。从'http'导入http;从'./config.json'导入配置;http.createServer((req,res)=>{res.write(`Appname:${config.name}\n`);res.write(`Appversion:${config.version}`);res.end();}).listen(8080);node.js抛出错误TypeError[ERR_UNKNOWN_FILE_EXTENSION]:尝试运行应用程序时未知文件扩展名“.json”Node.js在使用import语句时默认需要JavaScript代码。但多亏了JSON模块提案,您可以指明要导入的数据类型:JSON。在修复应用程序之前,让我们看一下JSON模块提案有哪些内容。2.JSON模块提案JSON模块提案的本质是允许使用常规导入语句在ES模块中导入JSON数据。可以通过添加导入断言来导入JSON内容:importjsonObjectfrom"./file.json"assert{type:"json"};assert{type:"json"}是一个导入断言,表明模块应该被解析并导入为json。jsonObject变量包含解??析file.json内容后创建的普通JavaScript对象。JSON模块的内容使用默认值导入,命名导入不可用。JSON模块也可以动态导入:const{default:jsonObject}=awaitimport('./file.json',{assert:{type:'json'}});动态导入模块时,包含JSON模块,默认内容在default属性中可用。在这种情况下,导入断言表示JSON类型。然而,有一个更通用的导入断言的提议(目前处于第3阶段)允许导入更多数据格式,例如CSS模块。3.启用JSON模块现在我们将JSON模块集成到Web应用程序中:importhttpfrom'http';importconfigfrom'./config.json'assert{type:"json"};http.createServer((req,res)=>{res.write(`应用名称:${config.name}\n`);res.write(`应用版本:${config.version}`);res.end();}).listen(8080);主模块现在导入config.json文件并访问其值config.name和config.version。JSON模块工作在Node.js版本>=17.1,也可以使用--experimental-json-modules标志节点启用ExperimentalJSON模块--experimental-json-modulesindex.mjs在浏览器环境下,JSON模块是从Chrome91开始可用的。4.总结默认情况下,ES模块只能导入JavaScript代码。感谢JSON模块提案,您可以直接将JSON内容导入ES模块。只需在import语句之后使用import断言。从“./file.json”导入jsonContentassert{type:“json”};你可以从Node.js17.1开始使用JSON模块,使用实验标志--experimental-json-modules,并在Chrome91及以上版本中使用。代码部署后可能存在的bug,无法实时获知。事后为了解决这些bug,花费了大量的时间在日志调试上。顺便推荐一个好用的bug监控工具Fundebug。作者:DmitriPavlutin译者:前端小智来源:dmitripavlutin原文:https://dmitripavlutin.com/ja...交流有梦想,有干货,微信搜索【大千世界】关注这位还在洗碗的在清晨擦碗。本文GitHubhttps://github.com/qq44924588...已收录,有完整的测试站点、资料和我的一线厂商访谈系列文章。
