Javascript 使NPM包可用于ES6和ECMAScript

Javascript 使NPM包可用于ES6和ECMAScript,javascript,node.js,npm,package.json,Javascript,Node.js,Npm,Package.json,我正在用TypeScript制作一个NPM包,我想知道如何使它可用于ES和节点模块 我已使用汇总和一些配置进行了设置: rollup.config.js 导出默认值{ 输入:“build/kimp.js”,//从TS生成 输出:[ { 文件:“dist/main/kimp.js”, 格式:“es”, 严格:错, 名称:'模块', 横幅:`#!/usr/bin/env node-版权所有2020 Herbie Vine-更新:${new Date()}` }, { 文件:“dist/module/

我正在用TypeScript制作一个NPM包,我想知道如何使它可用于ES和节点模块

我已使用汇总和一些配置进行了设置:

rollup.config.js

导出默认值{
输入:“build/kimp.js”,//从TS生成
输出:[
{
文件:“dist/main/kimp.js”,
格式:“es”,
严格:错,
名称:'模块',
横幅:`#!/usr/bin/env node-版权所有2020 Herbie Vine-更新:${new Date()}`
},
{
文件:“dist/module/kimp.js”,
格式:“umd”,
严格:错,
名称:'普通',
横幅:`#!/usr/bin/env node-版权所有2020 Herbie Vine-更新:${new Date()}`
}
],
插件:[
简洁(),
resolve(),
json(),
普通的({
包括:'node_modules/**'
})
],
外部:[
“加密”
]
};
package.json

{
    "name": "kimp",
    "version": "1.0.0",
    "description": "Lightweight ID generator",
    "sideEffects": false,
    "main": "dist/main/kimp.js", // import() - es6
    "module": "dist/module/kimp.js", // require() - node
    "scripts": {
        "build": "tsc -p ./src/tsconfig.json",
        "rollup": "rollup -c"
    },
    "publishConfig": {
        "registry": "https://npm.pkg.github.com/"
    },
    "keywords": [...],
    "repository": {...},
    "author": "Herbie Vine",
    "license": "MIT",
    "bugs": {...},
    "homepage": "https://github.com/herbievine/kimp#readme",
    "devDependencies": {...}
}

我尝试在express应用程序中使用它,但出现错误:

const { kimp } = require('kimp');
console.log(kimp)
------
C:\Users\**\kimp-ts\dist\main\kimp.js:3484
export { kimp };
^^^^^^
这来自es模块的内置版本


我是否错误地认为,当节点需要一个包时,它会查看package.json中的模块键。不管怎么说,我已经做了几个小时了,任何帮助都意味着使用您在rollup.config.js中指定的
format:'es'
格式编译到ESModules中的rollup时会有很多欢呼声。Nodejs使用commonjs模块,require应该导入它在那里找不到的commonjs模块,因此会出现错误。Nodejs开始从node版本10开始为ES模块提供实验支持。 如果您的node 10的版本高于node 10,则只需更新package.json中的express server开始脚本,以允许实验模块支持,例如:
“开始”:“节点--实验模块服务器.js”

根据您的喜好或要求,其他可行的方法:

  • 使用第三方
    @std/esm
    编译es模块并将其用作commonjs模块
  • 通过此汇总在commonjs模块中编译库

  • 编辑:上面的代码似乎在配置中出现了问题,解决了这个问题,package.json中的main和module条目以另一种方式声明,必须交换条目以正确设置它们。Main实际上应该指向umd,module应该指向es模块。

    使用您在rollup.config.js中指定的格式:'es'编译到ESModules的rollup。Nodejs使用commonjs模块,require应该导入它在那里找不到的commonjs模块,因此会出现错误。Nodejs开始从node版本10开始为ES模块提供实验支持。 如果您的node 10的版本高于node 10,则只需更新package.json中的express server开始脚本,以允许实验模块支持,例如:
    “开始”:“节点--实验模块服务器.js”

    根据您的喜好或要求,其他可行的方法:

  • 使用第三方
    @std/esm
    编译es模块并将其用作commonjs模块
  • 通过此汇总在commonjs模块中编译库

  • 编辑:上面的代码似乎在配置中出现了问题,解决了这个问题,package.json中的main和module条目以另一种方式声明,必须交换条目以正确设置它们。Main实际上应该指向umd,module应该指向es modules。

    我给了你一个要点,但是关于这个主题的更多细节,你也可以参考这篇文章并查看一下那篇文章。但是仍然给我一个错误:/。有没有什么方法可以让我指向我的
    dist/module
    文件夹,而不是从
    dist/main
    获取代码?@HerbieVine在该标志之后,您是否使用了
    import{kimp}from'kimp'
    ?是的,它给了我一个关于在节点中使用模块的错误scripts@HerbieVine您的main和module似乎是以另一种方式声明的,您需要交换条目。Main应该指向umd,module应该指向es modules。更多信息,请参见此。我给了你一个要点,但有关此主题的更多详细信息,你也可以参考这篇文章并查看该帖子。但是仍然给我一个错误:/。有没有什么方法可以让我指向我的
    dist/module
    文件夹,而不是从
    dist/main
    获取代码?@HerbieVine在该标志之后,您是否使用了
    import{kimp}from'kimp'
    ?是的,它给了我一个关于在节点中使用模块的错误scripts@HerbieVine您的main和module似乎是以另一种方式声明的,您需要交换条目。Main实际上应该指向umd,module应该指向es模块。有关更多信息,请参见此。