首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >EsBuild StartService替换

EsBuild StartService替换
EN

Stack Overflow用户
提问于 2021-03-10 19:21:18
回答 2查看 729关注 0票数 2

我是esBuild和ReactJS的新手,根据guid,我决定构建一个自定义的CLI Transpiling应用程序。我在文本区域中输入了一个文本,但在客户端的控制台上出现了以下错误消息:主机版本"0.8.27“与二进制版本"0.9.0”不匹配。我知道我使用的是一个较旧的版本,我确实尝试过先通过文档找到解决问题的方法,因为他们在新版本中完全丢弃了startService()方法。但是我找不到任何可能的解决方案来解决我的问题,是否有人有知识来帮助我解决这个问题。下面是我的代码,它必须启动代码转换:

代码语言:javascript
复制
const startService = async () => {
ref.current = await esbuild.startService({
  worker: true,
  wasmURL: '/esbuild.wasm'
})
  }

 useEffect(() => {
    startService()
  }, [])

  const onClick = async () => {
    if (!ref.current) {
      return;
    }
    const result = await ref.current.build({
      entryPoints: ['index.js'],
      bundle: true,
      write: false,
      plugins: [unpkgPathPlugin()]
    })
    console.log(result );
    setCode(result)
  }
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-03-12 00:48:39

在浏览器中运行esbuild的文档在这里:https://esbuild.github.io/api/#running-in-the-browser。在0.9.0版中,esbuild.startService()变为esbuild.initialize()service.build()变为esbuild.build() (即显式服务对象消失)。因此,更新后的代码可能如下所示:

代码语言:javascript
复制
const startService = async () => {
  await esbuild.initialize({
    worker: true,
    wasmURL: '/esbuild.wasm'
  })
  ref.current = true
}

useEffect(() => {
  startService()
}, [])

const onClick = async () => {
  if (!ref.current) {
    return;
  }
  const result = await esbuild.build({
    entryPoints: ['index.js'],
    bundle: true,
    write: false,
    plugins: [unpkgPathPlugin()]
  })
  console.log(result);
  setCode(result)
}
票数 6
EN

Stack Overflow用户

发布于 2021-10-08 16:19:27

请注意,在浏览器中运行时没有可用的异步API。另外,我不想在编辑时每次热重载时都抛出“已初始化”。这是我如何设置的:

代码语言:javascript
复制
import { useState, useEffect } from 'react';
import './App.css';
import * as esbuild from 'esbuild-wasm';

function App() {
  const [input, setInput] = useState('');
  const [code, setCode] = useState('');

  useEffect(() => {
    // This ugly code is to avoid calling initialize() more than once
    try {
      esbuild.build({});
    } catch (error) {
      if (error instanceof Error && error.message.includes('initialize')) {
        esbuild.initialize({
          worker: false,
          wasmURL: '/esbuild.wasm',
        });
      } else {
        throw error;
      }
    }
  }, []);

  const onClick = () => {
    esbuild
      .transform(input, {
        loader: 'jsx',
        target: 'es2015',
      })
      .then((result) => {
        setCode(result.code);
      });
  };

  return (
    <div className="App">
      <textarea
        value={input}
        onChange={(e) => setInput(e.target.value)}></textarea>
      <div>
        <button onClick={onClick}>Submit</button>
      </div>
      <pre>{code}</pre>
    </div>
  );
}

export default App;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66563719

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档