如何告诉npm使用父项目的依赖项在安装时构建模块?

时间:2017-03-11 00:18:26

标签: javascript node.js npm webpack material-ui

我想了解npm模块在安装时构建的方式,我举一个例子:

当我查看material-ui npm module sources on GitHub时,有来源但是没有内置文件,当我查看我的项目node_modules/material-ui目录时,我可以看到该目录只包含内置的文件(es5,uglify)。

我试图了解这种魔法是如何发生的?我看到package.json里面有构建脚本,但没有什么可以告诉npm在安装时运行它,我缺少什么?

由于

1 个答案:

答案 0 :(得分:2)

通常,模块不会构建在客户端的计算机上,因为这会花费额外的时间并且可能会失败,因为他们使用的是不支持构建的较旧版本的Node.js工具,当然还需要安装构建工具,这将使该过程更长。而是在发布之前构建它。 GitHub上的内容与实际发布到npm注册表的内容不同。大多数模块都不会将构建的源代码检入GitHub(尽管有些人更喜欢)。

大概material-ui手动执行此过程,只发布已构建的来源,如Unpkg - material-ui中所示。

redux等其他一些软件包使用prepublish钩子,在运行npm publishRedux prepublish hook)之前构建必要的源,这反映了已发布的内容您可以在Unpkg - Redux中看到包。它非常接近GitHub上的原始源,但只包含相关文件,包括.gitignore文件中的内置文件。因为很多文件不需要发布(例如test目录,rollup.config.js等)并且只占用客户端上的空间,所以可以指定files in package.json仅发布列出的文件(Redux files)。

在发布时,您恰好选择了一个非常令人困惑的包material-ui,而redux则更容易理解。