我想了解npm模块在安装时构建的方式,我举一个例子:
当我查看material-ui
npm module sources on GitHub时,有来源但是没有内置文件,当我查看我的项目node_modules/material-ui
目录时,我可以看到该目录只包含内置的文件(es5,uglify)。
我试图了解这种魔法是如何发生的?我看到package.json
里面有构建脚本,但没有什么可以告诉npm在安装时运行它,我缺少什么?
由于
答案 0 :(得分:2)
通常,模块不会构建在客户端的计算机上,因为这会花费额外的时间并且可能会失败,因为他们使用的是不支持构建的较旧版本的Node.js工具,当然还需要安装构建工具,这将使该过程更长。而是在发布之前构建它。 GitHub上的内容与实际发布到npm注册表的内容不同。大多数模块都不会将构建的源代码检入GitHub(尽管有些人更喜欢)。
大概material-ui
手动执行此过程,只发布已构建的来源,如Unpkg - material-ui中所示。
redux等其他一些软件包使用prepublish
钩子,在运行npm publish
(Redux prepublish hook)之前构建必要的源,这反映了已发布的内容您可以在Unpkg - Redux中看到包。它非常接近GitHub上的原始源,但只包含相关文件,包括.gitignore文件中的内置文件。因为很多文件不需要发布(例如test
目录,rollup.config.js
等)并且只占用客户端上的空间,所以可以指定files
in package.json
仅发布列出的文件(Redux files)。
在发布时,您恰好选择了一个非常令人困惑的包material-ui
,而redux
则更容易理解。