Javascript 如何设置依赖项以及如何编译npm模块?

Javascript 如何设置依赖项以及如何编译npm模块?,javascript,npm,bundling-and-minification,Javascript,Npm,Bundling And Minification,我发布了一些npm模块,所有模块都是针对现有库的,比如three.js或react 这些软件包似乎是下载的,但我没有收到任何关于它是否正确的反馈 依赖关系 定义依赖项时的高级别目标是什么 three.js: 这是令人困惑的,因为每个“扩展”都假设在某些上下文中有一个THREE对象可用 因此只提到: "devDependencies": { "three": "^0.88.0" } 它的用途如下: require( 'three-instanced-mesh' )(THREE) 这既有道理,

我发布了一些npm模块,所有模块都是针对现有库的,比如three.js或react

这些软件包似乎是下载的,但我没有收到任何关于它是否正确的反馈

依赖关系 定义依赖项时的高级别目标是什么

three.js: 这是令人困惑的,因为每个“扩展”都假设在某些上下文中有一个
THREE
对象可用

因此只提到:

"devDependencies": {
 "three": "^0.88.0"
}
它的用途如下:

require( 'three-instanced-mesh' )(THREE)
这既有道理,也没有道理

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

反应 我已经发表了我打算用作的:

  • npm安装我的模块
  • 从“我的模块”导入我的模块
  • 出于某种原因,我将react列为
    peerDependencies
    dep

    JSX中的
    意味着我已经做了一些事情,以使react在这个上下文中已经可用(类似于第一个示例中传递
    THREE

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

    这里期望的目标是什么?如何描述?我只知道我不想
    npm install my module
    安装不同版本的react,也不想让更多react以某种方式捆绑在最终捆绑包中(但我甚至不确定这一点)

    react
    对我的react组件应该是什么类型的依赖项(如果有)以及我应该如何将它链接到我的模块

    例如,在网页包中使用
    externals
    与从'React'导入React

    建造 如果我将我的回购协议设置为使用最新和最好的JS(或者甚至不是JS?),我应该如何发布,发布什么

    import Foo from 'foo' //<-- where does 'foo' point and what is 'foo'?
    
    从“Foo”导入Foo//
    定义依赖项时的高级别目标是什么

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

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

    它要求React在导入文件的位置可用,即:A导入
    myModule
    ,但A必须导入React。实际上,将对等依赖放在这里是最好的方法

    例如,在webpack中使用externals,与从“React”实际导入React相比

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

    如果我将我的回购协议设置为使用最新和最好的JS(或者甚至不是JS?),我应该如何发布,发布什么

    import Foo from 'foo' //<-- where does 'foo' point and what is 'foo'?
    
    通常是包含库缩小/绑定的index.js文件。使用npm发布,您需要在package.json上设置main字段


    从“Foo”导入Foo//投票结束?删除关于编译的部分可以解决这个问题吗?关于最后两段,假设我有
    /src
    和一堆用es6或其他东西编写的文件。至少我会将它们捆绑在一起,但最后应该
    foo
    指向a)捆绑的es6 index.js b)捆绑/传输的es5 index.js c)捆绑/传输/缩小的index.min.js d)只是一个es6条目main.js等