Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/452.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何为世博会分发包装?(.web.js、.js配置)_Javascript_React Native_Webpack_Expo_Metro Bundler - Fatal编程技术网

Javascript 如何为世博会分发包装?(.web.js、.js配置)

Javascript 如何为世博会分发包装?(.web.js、.js配置),javascript,react-native,webpack,expo,metro-bundler,Javascript,React Native,Webpack,Expo,Metro Bundler,我想为世博会分发一个包裹。此软件包是在expo SDK36中构建我的应用程序时创建的 与许多expo依赖项一样,我大量使用了.ios.js、.android.js和.web.js扩展 导入我在npm上发布的源代码时,解析器只导入.js,没有任何区别 例如,我们应该与世博会合作: 这是已解决的扩展: [ ".web.expo.ts", ".web.expo.tsx", ".web.expo.mjs", ".web.expo.js", ".web.expo.jsx", ".

我想为世博会分发一个包裹。此软件包是在expo SDK36中构建我的应用程序时创建的

与许多expo依赖项一样,我大量使用了
.ios.js
.android.js
.web.js
扩展

导入我在npm上发布的源代码时,解析器只导入
.js
,没有任何区别

例如,我们应该与世博会合作:

这是已解决的扩展:

[
  ".web.expo.ts",
  ".web.expo.tsx",
  ".web.expo.mjs",
  ".web.expo.js",
  ".web.expo.jsx",
  ".expo.ts",
  ".expo.tsx",
  ".expo.mjs",
  ".expo.js",
  ".expo.jsx",
  ".web.ts",
  ".web.tsx",
  ".web.mjs",
  ".web.js",
  ".web.jsx",
  ".ts",
  ".tsx",
  ".mjs",
  ".js",
  ".jsx",
  ".json",
  ".wasm"
]
但事实并非如此,我必须手动导入,在我的源代码中添加
.web

节点模块导入源时,如何配置
expo
或我的分布式软件包,以便能够为每个环境导入适当的源

编辑 我错误地期望我的扩展与我的
包.json的
main
字段一起工作,我已经用以下内容重新配置了我的回购:

/home/dka/workspace/github.com/yeutech-lab/react-cookiebot/src
├── CookieBot.js
├── CookieBot.native.js
└── index.js
问题:
  • 我使用了
    .native.js
    ,因此我的reactjs用户(不仅仅是expo和react本地用户)将默认导入
    .js
    文件
  • 由于(1),其他react用户(react native或expo)不需要某种额外的配置来支持react native扩展
    .web.js
    .ios.js
    .android.is
    .native.js
    .js
  • 如果我更喜欢
    .web.js
    而不是(1),我的react用户将不可能像(2)中那样,在这种情况下:他们在项目中配置react本机扩展的方式是什么?
  • 对于所有react本机用户,我可以知道在本机项目中可以在何处配置扩展吗?(我相信可以使用
    config.resolve.extensions在webpack中配置web项目

  • 关于主字段

    在节点模块中,您可以通过删除
    package.json
    中的文件扩展名,使绑定器解析特定于平台的“主”文件

     -  "main": "index.js"
     +  "main": "index"
    
    我建议不要这样做,因为捆绑解决方案在Webpack和Metro之外的捆绑机中可能会有不同的工作方式。让一个“主”文件重新导出其他平台特定模块的内容会更安全(这似乎是您在编辑中所做的,但为了完整起见,我将在这里留下解释):

    index.js

    export * from './module';
    
    • module.js
      js
    • module.web.js
      React Native for web
    • module.native.js
      React native
  • 如果我更喜欢
    .web.js
    而不是(1),我的react用户将不可能像(2)中那样,在这种情况下:他们在项目中配置react本机扩展的方式是什么
  • 重要的是要记住,
    .web.js
    仍然可以解决,即使项目不是React原生web项目。创建React应用程序为每个项目解析
    .web.js
    扩展

    在web上,用户可以通过修改Webpack配置的字段来配置其平台扩展。在Expo中,可以通过运行
    Expo自定义:web

  • 配置本机扩展

  • 这可以通过编辑项目的Metro配置来实现:。

    这是当之无愧的奖励,非常感谢您给出的详细答案。您是否建议在世博生态系统的分布式软件包中使用CJS或ESM synthax?我们可以同时分发吗?expo如何知道导入哪一个?@DimitriKopriwa如果包的名称以
    expo-
    react-
    开头,则发送ESM以获得更好的树震动效果。此软件包非常适合创建与expo兼容的软件包:。基本通用软件包的示例:。非常好的Evan,非常感谢您分享。为什么以
    expo-
    react-
    开头的名称是分发ESM的一个好指标?您如何在另一个expo项目中与模块一起工作?是否需要为所有依赖项配置网页包别名?您是否使用npm软件包?