【问题标题】:how to set dependencies and how to compile an npm module?如何设置依赖关系以及如何编译 npm 模块?
【发布时间】:2018-08-14 00:17:59
【问题描述】:

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

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

依赖关系

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

三个.js:

这很令人困惑,因为每个“扩展”只是假设在某些上下文中有一个THREE 对象可用。

My three.js module 因此只提到:

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

而且它是这样使用的:

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

这两者都有道理,也没有道理。

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

反应

我已经发布了a React component,我打算这样使用它:

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

出于某种原因,我将 react 列为 peerDependencies dep。

JSX 中的

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

这里的区别是我没有在运行时定义类,因此调用import MyModule 需要在MyModule.js 中提供反应?

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

reactmy-react-component 应该是什么类型的依赖项(如果有),我如何将它实际链接到我的模块?

例如,将 externals 与 webpack 一起使用与实际使用 import React from 'react'

构建

如果我将我的 repo 设置为使用最新和最伟大的 JS(甚至不是 JS?),我应该如何发布以及发布什么?

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

【问题讨论】:

  • 投票结束?去掉编译部分能解决问题吗?

标签: javascript npm bundling-and-minification


【解决方案1】:

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

您必须定义仅在开发时使用的依赖项(devDependencies)以及当有人安装您的包并将自动安装时需要的依赖项(依赖项),以及您需要可用的依赖项,但是您希望用户安装(老实说,这没有意义)peerDependencies。

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

它需要 React 在文件被导入的地方可用,即:A 导入 myModule,但 A 必须有 react 导入。作为对等依赖项确实是最好的方法。

例如在 webpack 中使用 externals 与从 'react' 实际导入 React?

在 webpack 中使用 externals 只是告诉 webpack 不要捆绑 react 并说 react 将在导入此组件之前被导入。

如果我将我的 repo 设置为使用最新和最伟大的 JS(甚至不是 JS?),我应该如何发布以及发布什么?

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

import Foo from 'foo' //

foo 指向您创建的包的名称,即:发布此包的名称。当您访问 npmjs.org 并搜索 foo 时,这将是包。 foo 在你的 node_modules 中。

【讨论】:

  • 关于最后两段,假设我有 /src 有一堆用 es6 或其他东西编写的文件。至少我会将它们捆绑在一起,但最后应该 foo 指向 a) 捆绑的 es6 index.js b) 捆绑/转译的 es5 index.js c) 捆绑/转译/缩小的 index.min.js d)只是一个 es6 入口 main.js 等
猜你喜欢
  • 1970-01-01
  • 2017-08-12
  • 2014-05-07
  • 1970-01-01
  • 1970-01-01
  • 2014-10-24
  • 2015-12-28
  • 2016-07-21
  • 2016-07-12
相关资源
最近更新 更多