SystemJS 配置中的模块 Vs 位置 Vs 包是什么?

What is module Vs location Vs package in SystemJS configuration?

我对 SystemJS 配置中使用的各种术语有点困惑。它谈论 模块、位置、包 等...

JS中的module不就是一个文件,package不是一个模块或者文件的集合吗?如果是这样,模块如何成为包的别名?

这是来自documentation page:

The map option is similar to paths, but acts very early in the normalization process. It allows you to map a module alias to a location or package:

是的,模块是单个文件,在 javascript 中,它只是

from 关键字后引号中的文件名(假定具有 .js 扩展名)
import ... from 'some-module';

在 SystemJS 配置文件中,pathsmap 可用于定义 some-module 所指的实际文件或 URL。

配置文件中的

packages 允许您为特定位置或以下的所有模块应用一组配置参数(默认扩展名、模块格式、自定义加载程序等)(packages 中的键对象)。

packages中的一个设置是main,它类似于node中package.json中的main(除了它的默认值为空,而不是index.js):当包位置本身出现在 import 语句中的 from 中时,它确定加载哪个文件。

所以,我想 "how a module can be an alias to a package?" 关于这个的问题

The map option is similar to paths, but acts very early in the normalization process. It allows you to map a module alias to a location or package:

可以在这个例子中解释:

paths: {
    'npm:': 'node_modules/'
},
map: {
    'some-module': 'npm:some-module'
},
packages: {
    'some-module': {
        main: './index.js'
    }
}

当这些 mappackagespath 设置被 SystemJS 应用到

import something from 'some-module';

它们将导致 SystemJS 从 node_modules/some-module/index.js 下的 baseURL 加载模块。

import something from 'some-module/subcomponent';

映射到 node_modules/some-module/subcomponent.js.

注意:这是基于我使用 SystemJS 0.19 的经验。我还没试过 0.20。