Rollup.js未解决的依赖关系

25

我正在尝试将rollup.js集成到项目中。目前在控制台中出现如下警告(未解决的依赖项),我不确定原因是什么,也不知道该如何解决:

'fs' is imported by node_modules\filereader\FileReader.js, but could not be resolved – treating it as an external dependency

'fs' is imported by  commonjs-external:fs, but could not be resolved – treating it as an external dependency

preferring built-in module 'punycode' over local alternative at 'C:\Users\Ryan\OneDrive\Projects\Custom Coding\Zapier\Ryan Test\node_modules\punycode\punycode.js', pass 'preferBuiltins: false' to disable this behavior or 'preferBuiltins: true' to disable this warning

preferring built-in module 'punycode' over local alternative at 'C:\Users\Ryan\OneDrive\Projects\Custom Coding\Zapier\Ryan Test\node_modules\punycode\punycode.js', pass 'preferBuiltins: false' to disable this behavior or 'preferBuiltins: true' to disable this warning

这里是test.js脚本,需要FileReader和https:

var FileReader = require('filereader');
var https = require('https');

最后是执行打包的 rollup.config.js 文件:

var rollup = require('rollup');

var commonjs = require('rollup-plugin-commonjs');
var nodeResolve = require('rollup-plugin-node-resolve');
var globals = require('rollup-plugin-node-globals');
var builtins = require('rollup-plugin-node-builtins');

// build bundle
rollup
  .rollup({
    entry: 'test.js',
    plugins: [
      nodeResolve(),
      commonjs(),
      globals(),
      builtins()
    ]
  })
  .then(bundle => bundle.write({
    dest: 'rollupBundle/bundle.js',
    format: 'cjs'
  }))
  .catch(err => console.log(err.stack));
1个回答

23
CLI会生成更具信息性的警告——如果您更新配置文件以使用标准格式,那么您可以使用rollup -c,它通常会给您一个URL来帮助诊断问题。

这是一个带有必要更改的配置文件,以消除这些警告:

import commonjs from 'rollup-plugin-commonjs';
import nodeResolve from 'rollup-plugin-node-resolve';
import globals from 'rollup-plugin-node-globals';
import builtins from 'rollup-plugin-node-builtins';

export default {
  entry: 'test.js',
  dest: 'rollupBundle/bundle.js',
  format: 'cjs',
  external: [ 'fs' ], // tells Rollup 'I know what I'm doing here'
  plugins: [
    nodeResolve({ preferBuiltins: false }), // or `true`
    commonjs(),
    globals(),
    builtins()
  ]
};

更新:现在,“官方”的Rollup插件已经放在npm的@rollup名称空间下,如果您安装了上述两个版本,将会收到一个“npm WARN deprecated”的消息,因此请安装较新的版本:

npm install @rollup/plugin-commonjs --save-dev
npm install @rollup/plugin-node-resolve --save-dev

然后像这样使用它们:

import commonjs from '@rollup/plugin-commonjs';
import { nodeResolve } from '@rollup/plugin-node-resolve';

有什么想法为什么我会收到一个错误,说基于上述内容https未定义?这不是一个Rollup错误,而是来自我尝试部署的环境的错误。 - Jim M
很抱歉,没有可重现的问题进行调查,很难说。 - Rich Harris
我添加了一个小更新,因为“官方”的Rollup插件现在在@rollup命名空间下,但是答案截至今天(2020年8月)仍然有效。 - chrisweb
插件的顺序非常重要。任何变化都会产生令人惊讶的错误。 - Tomasz Plonka
我在导入child_process时仍然遇到500内部服务器错误。 - Derk Jan Speelman
据我理解,这只是为Node库添加polyfills。对于Electron,在那里可以通过require/import获得Node内置函数,您有什么实际保持导入到真正标准库的建议吗? - leumasme

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接