如何设置依赖关系以及如何编译npm模块?

时间:2018-08-14 00:17:59

标签: javascript npm bundling-and-minification

我发布了一些npm模块,所有模块都适用于现有库,例如three.js或react。

这些软件包似乎已下载,但是我没有收到有关是否正确完成操作的反馈。

依赖项

定义依赖项时的高级目标是什么?

three.js:

这令人困惑,因为每个“扩展名”仅假设在某些情况下有一个THREE对象可用。

My three.js module因此仅提及:

"devDependencies": {
 "three": "^0.88.0"
}

它的用法如下:

require( 'three-instanced-mesh' )(THREE)

既有意义又没有意义。

如果没有three.js和传入适当的上下文(THREE),该模块将无法工作,但是由于我是在运行时(?)传递该模块的,因此它似乎并不是一个实际的依赖项。当我签出仓库并想在其中进行开发时,如果我想运行代码,我确实需要安装three.js

反应

我已经发布了a React component,我打算将其原样使用:

  1. npm install my-module
  2. import MyModule from 'my-module
  3. <MyModule/>

出于某种原因,我将反应列为peerDependencies部门。

JSX中的

<MyModule/>意味着我已经做了一些事情以使在这种情况下已经可以做出反应(类似于第一个示例中的THREE传递方式?)。

这里的区别是我没有在运行时定义类,因此调用import MyModule要求做出反应才能在MyModule.js中可用?

这里期望的目标是什么以及如何描述?我只知道我不希望npm install my-module安装其他版本的react或以某种方式导致更多的react捆绑在最终的捆绑包中(但我什至不确定)。

reactmy-react-component应该是什么类型的依赖关系,我该如何将其实际链接到我的模块?

例如,将externals和webpack一起使用,而不是实际使用import React from 'react'

构建

如果我将回购设置为可与最新和最优秀的JS(甚至不包括JS?)一起使用,我应该如何发布?

import Foo from 'foo' //<-- where does 'foo' point and what is 'foo'?

1 个答案:

答案 0 :(得分:1)

  

定义依赖项时的高级目标是什么?

您必须定义仅在开发时使用的依赖项(devDependencies),以及在有人安装您的软件包并准备自动安装时所需要的依赖项(dependencies),并且您需要可用的依赖项希望用户安装(实际上,这没有意义)peerDependencies。

  

这里的区别是我没有在运行时定义类,因此调用import MyModule要求做出反应才能在MyModule.js中使用?

这将要求React在导入文件的地方可用,即:A导入myModule,但是A必须已导入react。确实,将对等关系放在这里是最好的方法。

  

例如,将外部事物与webpack结合使用,而不是从“反应”中实际导入React?

在webpack中使用外部设备只是告诉webpack不要捆绑react,并说react将在导入此组件之前导入。

  

如果我将回购设置为可与最新和最优秀的JS(甚至不包括JS?)一起使用,我应该如何发布?

通常,包含缩小/捆绑在一起的库的index.js文件。使用npm发布该文件,您需要在package.json上设置主字段

  

从'foo'导入Foo // //-'foo'指向何处,'foo'是什么?

foo指向您创建的包的名称,即:该包的发布名称。当您转到npmjs.org并搜索foo时,它将成为软件包。 foo在您的node_modules中。