所以,在我的webpack源代码中,我尝试了
import {Papa} from "papaparse"
export {Papa}
以及
import Papa from "papaparse"
export {Papa}
注意第二个命令,import没有使用花括号,没有花括号的命令(默认import?)在我这样调用时工作:
import {Papa} from "papaparse-webpack-generated.js"
Papa.parse(...)
这是我用npm下载的papaparse.js文件
(function(root, factory)
{
/* globals define */
if (typeof define === 'function' && define.amd)
{
// AMD. Register as an anonymous module.
define([], factory);
}
else if (typeof module === 'object' && typeof exports !== 'undefined')
{
// Node. Does not work with strict CommonJS, but
// only CommonJS-like environments that support module.exports,
// like Node.
module.exports = factory();
}
else
{
// Browser globals (root is window)
root.Papa = factory();
}
// in strict mode we cannot access arguments.callee, so we need a named reference to
// stringify the factory method for the blob worker
// eslint-disable-next-line func-name
}(this, function moduleFactory()
{
'use strict';
var Papa = {};
Papa.parse = CsvToJson;
Papa.unparse = JsonToCsv;
//a bunch of functions and variables here
return Papa;
}));
我只是想知道这两者之间有什么区别?为什么如果我使用大括号,webpack生成的js会失败?如果我使用命名的import(大括号)使用webpack生成,Papa.parse
会给予我Papa is undefined
编辑:我们可以从上面的papaparse.js
片段中看到,变量Papa
没有export
语句。我错过了什么吗?那么,我们如何判断它是命名的还是默认的导出?
谢谢
2条答案
按热度按时间sxpgvts31#
在你导入的文件中,你会注意到Papa被导出为“默认导出”,一个模块可以有一个默认导出和任意数量的命名导出。
默认导出是使用不带花括号的语法导入的,并且可以在导入的文件中使用任何名称(因为歧义不是通过名称解决的,而是通过模块只能使用on default export这一事实解决的)。
另一方面,命名导出必须由其特定名称引用,并且必须放在大括号内,以表示它们是命名导出。您可以使用以下语法导入多个命名导出:
Or even import both:
请在此处进一步阅读:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/import
mm9b1k5b2#
这一切都归结为
papaparse
公开/导出其模块的方式。如果正在执行:
您需要这样导入它(导入默认导出成员时不需要花括号):
但是,如果是命名导出,例如:
您将需要使用其名称导入它: