You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Rollup中不使用node resolve插件,如何通过命令行用--external排除模块?

解决Rollup排除原生ES模块lit-html的问题

你遇到的问题主要出在两个地方:一是Rollup命令的参数顺序错了,导致它把--external当成了入口文件;二是--external指定的路径没匹配上你实际的导入语句。我来一步步帮你搞定:

1. 先修正命令参数顺序

Rollup的命令语法是 rollup [配置选项] <入口文件>,所有像--format、--file、--external这类选项,必须放在入口文件前面。你之前把--external放在src/main.js后面,Rollup会误以为--external是第二个入口文件,所以才会报错Could not resolve entry (--external)。

2. 匹配正确的外部模块路径

因为你没用到node-resolve插件,Rollup不会自动把node_modules里的模块识别成外部依赖,所以得明确指定和你导入语句匹配的路径:

方式1:精准匹配导入的相对路径

你的导入语句是import { html, render } from '../../node_modules/lit-html/lit-html.js',直接把这个路径作为--external的参数就行:

rollup --format=esm --file=dist/bundle.js --external '../../node_modules/lit-html/lit-html.js' src/main.js

方式2:用通配符适配更多场景

如果后续还有其他从lit-html导入的文件,用通配符会更省心,能匹配所有相关路径:

rollup --format=esm --file=dist/bundle.js --external '**/node_modules/lit-html/**' src/main.js

3. 更靠谱的配置文件方式

要是命令行参数太繁琐,推荐用Rollup配置文件(rollup.config.js),配置更清晰也更容易维护:

export default {
  input: 'src/main.js',
  output: {
    file: 'dist/bundle.js',
    format: 'esm'
  },
  // 只要导入路径包含node_modules/lit-html/,就视为外部模块
  external: (id) => id.includes('node_modules/lit-html/')
};

之后只需要运行这条命令就行:

rollup -c

验证结果

打包完成后打开dist/bundle.js,你会看到原有的import { html, render } from '../../node_modules/lit-html/lit-html.js'语句被完整保留,lit-html的代码不会被打包进来,这样就能在浏览器里正常运行了。

内容的提问来源于stack exchange,提问作者user8555599

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 09:13:57