package.json中type的含义

一.创建项目文件

二.文件内容

a.js

import { num1, num2 } from "./b.js";

console.log(num1);

b.js

let num1 = 30;

let num2 = 40;

export { num1, num2 };

三.执行命令

node a.js

注意:报错 Cannot use import statement outside a module 意思是:不支持使用es6的import语法

四.如何解决

需要配置package.json中的内容,添加type属性

{

"type": "module", //添加了这一行代码

"name": "al01",

"version": "1.0.0",

"description": "",

"main": "a.js",

"scripts": {

"test": "echo \"Error: no test specified\" && exit 1"

},

"keywords": [],

"author": "",

"license": "ISC"

}

再次执行命令 node a.js 就可以运行了

五.分解学习

注意:

1/无扩展: 指的是不包含扩展名的文件路径,而不是说在创建的文件中删除文件的扩展名

(一):最近的package.json缺少"type" 字段 或者包含 "type":"commonjs"

则无扩展名的文件和.js结尾文件将被视为commonjs

若一直到根目录,还没有找到package.json,node.js则默认规则运行

(二)最近的package.json包含"type":"module"

则.js结尾的文件和无扩展的文件的导入语句都被视为ES6模块

import './startup.js'; //能识别

六.提升

不管type字段的值是多少, 以.mjs后缀名的文件总是被当作ES6模块,而以.cjs后缀名的文件总是被当成CommonJS模块

七.总结

type字段的产生用于定义package.json文件和该文件所在目录根目录中.js文件和无拓展名文件的处理方式。值为'moduel'则当作es模块处理;值为'commonjs'则被当作commonJs模块处理

目前node默认的是如果pacakage.json没有定义type字段,则按照commonJs规范处理

node官方建议包的开发者明确指定package.json中type字段的值

无论package.json中的type字段为何值,.mjs的文件都按照es模块来处理,.cjs的文件都按照commonJs模块来处理


TOP