Har*_*til 5 javascript node.js webpack vite
我试图将我的 Node.js 服务器端代码(Koa 应用程序)捆绑到一个文件中,这是我使用as时Webpack 生成的文件。这也是达到的目的。targetnodencc - node.js compiler collection
我现在正在使用Vite进行我的下一个项目。我可以使用Vite提供的SSR捆绑功能来捆绑代码。但我无法将第三方依赖项捆绑到这个单个文件中(不包括 core/built-in node.jsmodules )。这是我的 Vite 构建脚本:
import path from 'path';
import { build } from 'vite';
import builtinModules from 'builtin-modules';
async function main() {
const result = await build({
mode: 'production',
appType: 'custom',
root: path.join(process.cwd(), 'backend'),
ssr: {
format: 'esm',
target: 'node',
// By default Vite bundles everything except the one we pass via `external` array.
external: builtinModules
},
build: {
manifest: false,
rollupOptions: {
input: 'backend/main.mjs',
output: {
assetFileNames: 'bundle.js'
}
},
outDir: '../dist/backend',
ssr: true,
emptyOutDir: true
},
plugins: [],
});
}
main();
Run Code Online (Sandbox Code Playgroud)
在上面的代码中,builtinModules只是所有核心node.js模块的字符串数组:
// builtinModules
[
'assert', 'async_hooks',
'buffer', 'child_process',
'cluster', 'console',
'constants', 'crypto',
'dgram', 'diagnostics_channel',
'dns', 'domain',
'events', 'fs',
'http', 'http2',
'https', 'inspector',
'module', 'net',
'os', 'path',
'perf_hooks', 'process',
'punycode', 'querystring',
'readline', 'repl',
'stream', 'string_decoder',
'timers', 'tls',
'trace_events', 'tty',
'url', 'util',
'v8', 'vm',
'worker_threads', 'zlib'
]
Run Code Online (Sandbox Code Playgroud)
对于我的原始源代码:
// main.mjs
import path from 'path';
import Koa from 'koa';
async function main() {
console.log('Source folder', path.join(__dirname, 'src'));
const app = new Koa();
app.listen(3000);
}
main();
Run Code Online (Sandbox Code Playgroud)
上述 Vite 构建配置的生成输出是:
// bundle.js
import path from "path";
import Koa from "koa";
async function main() {
console.log("Source folder", path.join(__dirname, "src"));
const app = new Koa();
app.listen(3e3);
}
main();
Run Code Online (Sandbox Code Playgroud)
理想情况下,我预计它将koa在最终输出中捆绑包,仅留下本机path模块。但事实并非如此。
那么,如何将整个后端/Node.js 源代码捆绑编译成单个文件,只留下核心 Node.js 模块作为外部模块,因为 Node.js 是我的代码的运行时?vite 服务器选项也提供了该noexternal选项,但将其设置为true仅适用于没有任何内置节点模块可用的webworker运行时。
最新的 vite 版本正在使用预加载,您应该调整一些汇总选项以禁用代码分割
import { defineConfig } from 'vite' // 2.8.0
import react from '@vitejs/plugin-react' // 1.0.7
export default defineConfig ({
plugins: [react()],
build: {
rollupOptions: {
output: {
manualChunks: {}
},
},
},
})
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5981 次 |
| 最近记录: |