javascript - 如何设置依赖关系以及如何编译 npm 模块?
问题描述
我发布了一些 npm 模块,所有模块都用于现有库,例如 three.js 或 react。
这些软件包似乎已下载,但我没有收到关于它是否正确完成的反馈。
依赖项
定义依赖项时的高级目标是什么?
三.js:
这是令人困惑的,因为每个“扩展”只是假设THREE
在某些上下文中有一个可用的对象。
"devDependencies": {
"three": "^0.88.0"
}
它是这样使用的:
require( 'three-instanced-mesh' )(THREE)
这既有意义又没有意义。
如果没有三个.js 和传入的正确上下文(),该模块将无法工作THREE
,但是由于我在运行时将其传入(?),它似乎不是一个实际的依赖项。three.js
当我签出 repo 并想在其中开发时,如果我想让代码运行,我确实需要安装。
反应
我已经发布了一个 React 组件,我打算这样使用它:
npm install my-module
import MyModule from 'my-module
<MyModule/>
出于某种原因,我将 react 列为一个peerDependencies
部门。
<MyModule/>
在 JSX 中意味着我已经做了一些事情来让反应在这种情况下已经可用(类似于THREE
第一个示例中的传递方式?)。
这里的区别是我没有在运行时定义类,因此调用import MyModule
需要 react 才能在MyModule.js
?
这里期望的目标是什么以及如何描述它?我只知道我不想npm install my-module
安装不同版本的反应,或者以某种方式导致更多反应以某种方式捆绑在最终捆绑包中(但我什至不确定)。
react
应该是什么类型的依赖项(如果有的话)my-react-component
以及我如何将它实际链接到我的模块?
例如,使用externals
带有 webpack 的东西与实际的import React from 'react'
?
建造
如果我将我的 repo 设置为使用最新和最伟大的 JS(甚至不是 JS?),我应该如何以及发布什么?
import Foo from 'foo' //<-- where does 'foo' point and what is 'foo'?
解决方案
定义依赖项时的高级目标是什么?
您必须定义仅在开发时使用的依赖项(devDependencies)以及当有人安装您的包并将自动安装时需要的依赖项(依赖项),以及您需要可用的依赖项,但您希望用户安装(老实说,这没有意义)peerDependencies。
这里的区别是我没有在运行时定义类,因此调用 import MyModule 需要反应才能在 MyModule.js 中可用?
它需要 React 在文件被导入的地方可用,即: A 导入myModule
,但 A 必须有 react 导入。作为对等依赖项确实是最好的方法。
例如,将外部事物与 webpack 一起使用与从“react”实际导入 React?
在 webpack 中使用 externals 只是告诉 webpack 不要捆绑 react 并说 react 将在导入该组件之前被导入。
如果我将我的 repo 设置为使用最新和最伟大的 JS(甚至不是 JS?),我应该如何以及发布什么?
通常是包含缩小/捆绑的库的 index.js 文件。使用 npm 发布,您需要在 package.json 上设置 main 字段
import Foo from 'foo' //<-- 'foo' 指向哪里,'foo' 是什么?
foo
指向您创建的包的名称,即:发布此包的名称。当您访问 npmjs.org 并搜索 foo 时,这将是包。foo 在你的 node_modules 中。