Javascript 如何为世博会分发包装?(.web.js、.js配置)
我想为世博会分发一个包裹。此软件包是在expo SDK36中构建我的应用程序时创建的 与许多expo依赖项一样,我大量使用了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", ".
.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软件包?