我正在处理的项目是用Node CommonJS模块编写的。我的观点是让这个项目可以从浏览器访问。我决定使用Rollup.js,这样在创建包时,您可以在浏览器中包含脚本并使用库中的函数(这要归功于iife格式)。我需要安装Rollup的插件来将CommonJS模块转换为ES6模块,这样浏览器就可以理解它。
一切都很好,除了这个项目使用来自npm的bson库。这个bson库是我的一个模块所需要的,它使用了它的一些函数。在我创建了一个包并将其包含到index.html中之后,console中出现了一个错误消息:"require is not defined“。当我查看创建的包的内部时,有一些要求。
var Map = require('./map'),
Long = require('./long'),
Double = require('./double'),
Timestamp = require('./timestamp'),
ObjectID = require('./objectid'),
BSONRegExp = require('./regexp'),
Symbol$1 = require('./symbol'),
Int32 = require('./int_32'),
Code = require('./code'),
Decimal128 = require('./decimal128'),
MinKey = require('./min_key'),
MaxKey = require('./max_key'),
DBRef = require('./db_ref'),
Binary = require('./binary');我已经在Plunker中创建了简单的代码来向你展示我的配置和简化的结构。https://plnkr.co/edit/YuiVJxhwhjUQ0Flw0Mg3?p=preview
在这个柱塞中有两个简单的模块,一个需要bson库,另一个需要第一个模块。还有Rollup配置文件,我在其中使用插件(如果没有全局插件,则会出现错误:Uncaught ReferenceError: Buffer is not defined)。
我真的很困惑。我是不是误解了什么?为什么不能像我的其他代码一样转换成ES6模块呢?
以下是bson库链接:https://www.npmjs.com/package/bson
发布于 2018-05-20 00:24:41
让我们看看:
为了让rollup捆绑你的应用程序,你需要首先将commonjs模块转换成es模块,这是通过你已经在使用的rollup-plugin-commonjs (https://github.com/rollup/rollup-plugin-commonjs)完成的,也许你可以在选项中显式地设置包含bson包。我通常这样使用它,以防万一:
commonjs({ include: ['node_modules/**'] })
如果一些库使用节点全局模块,你需要在浏览器中包含它们,这就是为什么你需要rollup-plugin- node -globals的原因。
最后,如果你看一下bson github存储库,有一个名为browser_build的文件夹,它包含了库的UMD定义,所以如果你需要'bson/browser_build‘而不是'bson’,它应该可以工作,而且你可能不需要使用全局插件。
看看js模块格式(cjs、umd、iife、es、amd),这是值得的。
https://stackoverflow.com/questions/49147762
复制相似问题