使用汇总构建 sapper 客户端中的外部和全局变量
external, and globals in sapper client build using rollup
使用 rollup
构建支持外部变量和全局变量。
我们可以在代码中导入一个模块,然后说它是外部的,那么rollup
就不会把它包含在bundle中。
如果我们给它 global,它 'sets' 将结果导入 umd
包中的 global。
但是在使用 sapper
时使用做同样的事情将模块保持为外部,然后服务器构建正常工作,但客户端构建不考虑全局变量,而是尝试在浏览器中执行 'import',并且失败,出现 TypeError ,
': Failed to resolve module specifier “…”' .
是否可以在 sapper
客户端构建中将库保留为外部库,并指示它使用全局库而不是导入库?或者我在这里弄错了一些非常基本的东西?
当您将模块保留在包外部时,这实际上意味着 import
声明保留在生成的代码中。所以如果你有类似
的东西
import foo from 'foo';
然后你的服务器代码将有类似
const foo = require('foo');
(有效,因为 Node 模块解析算法),并且在您的客户端 JS 中,您最终会得到完全相同的 import
... 而 不会 在浏览器中工作,因为导入路径需要是相对的。 (这可能会在未来随着导入地图而改变。)
最简单的解决方案是不使用 external
,让 Rollup 处理它(您可以只为客户端这样做)。但是,如果您确实想使用全局变量,则可以使用 @rollup/plugin-virtual
:
plugins: [
virtual({
foo: `export default window.foo`
}),
// ...
]
然后在您的 src/template.html
中添加一个 <script>
标记,该标记指向 static
.
中的文件
使用 rollup
构建支持外部变量和全局变量。
我们可以在代码中导入一个模块,然后说它是外部的,那么rollup
就不会把它包含在bundle中。
如果我们给它 global,它 'sets' 将结果导入 umd
包中的 global。
但是在使用 sapper
时使用做同样的事情将模块保持为外部,然后服务器构建正常工作,但客户端构建不考虑全局变量,而是尝试在浏览器中执行 'import',并且失败,出现 TypeError ,
': Failed to resolve module specifier “…”' .
是否可以在 sapper
客户端构建中将库保留为外部库,并指示它使用全局库而不是导入库?或者我在这里弄错了一些非常基本的东西?
当您将模块保留在包外部时,这实际上意味着 import
声明保留在生成的代码中。所以如果你有类似
import foo from 'foo';
然后你的服务器代码将有类似
const foo = require('foo');
(有效,因为 Node 模块解析算法),并且在您的客户端 JS 中,您最终会得到完全相同的 import
... 而 不会 在浏览器中工作,因为导入路径需要是相对的。 (这可能会在未来随着导入地图而改变。)
最简单的解决方案是不使用 external
,让 Rollup 处理它(您可以只为客户端这样做)。但是,如果您确实想使用全局变量,则可以使用 @rollup/plugin-virtual
:
plugins: [
virtual({
foo: `export default window.foo`
}),
// ...
]
然后在您的 src/template.html
中添加一个 <script>
标记,该标记指向 static
.