【问题标题】:How to use symlinks in React Native projet?如何在 React Native 项目中使用符号链接?
【发布时间】:2019-05-02 13:27:32
【问题描述】:

react-native https://github.com/facebook/metro/issues/1 中仍未正式提供符号链接支持。

实际上可以将 package.json 中的符号链接与 npm(不是 yarn)一起使用

{
  "name": "PROJECT",
  "version": "0.1.0",
  "private": true,
  "scripts": {
    "start": "node node_modules/react-native/local-cli/cli.js start",
    "test": "jest"
  },
  "dependencies": {
    "my_module1": "file:../shared/my_module1/",
    "my_module2": "file:../shared/my_module2/",
    "react": "16.8.3",
    "react-native": "0.59.5",
  },
  "devDependencies": {
    "babel-jest": "24.7.1",
    "jest": "24.7.1",
    "metro-react-native-babel-preset": "0.53.1",
    "react-test-renderer": "16.8.3"
},
"jest": {
    "preset": "react-native"
  }
}

虽然我们会得到my_module1在急速模块地图中不存在

为了解决这个问题,我们可以在 metro.config.js(以前的 rn-cli.config.js)之前做

const path = require("path")

const extraNodeModules = {
  /* to give access to react-native-firebase for a shared module for example */
  "react-native-firebase": path.resolve(__dirname, "node_modules/react-native-firebase"),
}
const watchFolders = [
  path.resolve(__dirname, "node_modules/my_module1"),
  path.resolve(__dirname, "node_modules/my_module2"),
]

module.exports = {
  resolver: {
    extraNodeModules
  },
  watchFolders,
  transformer: {
    getTransformOptions: async () => ({
      transform: {
        experimentalImportSupport: false,
        inlineRequires: false
      }
    })
  }
}

不幸的是,它不再适用于 react-native 0.59 应用程序正在重新加载,但源代码的更改不会反映在应用程序中。任何人都有实现这一目标的线索?

【问题讨论】:

    标签: react-native npm symlink


    【解决方案1】:

    我遇到了类似的问题并找到了haul

    1. 按照运输getting started 的说明进行操作。
    2. 使用file:../ 添加本地依赖项,例如:
    // package.json
    "dependencies": {
      "name-of-your-local-dependency": "file:../"
    }
    
    1. yarn --force重新安装node_modules
    2. 通过yarn start 启动开发服务器(haul 将替换您的启动脚本)
    3. 运行react-native run-android 或/和react-native run-ios

    【讨论】:

      【解决方案2】:

      我找到的答案都不适合我,而且似乎不会很快支持符号链接(请参阅:https://github.com/facebook/metro/issues/1),所以我不得不手动完成。

      我正在使用onchange npm 包并在我的本地包中运行它:onchange 'dist/**/*.js' -- cp -R ./dist ../../app/node_modules/@author/packagename

      这对我实现开发和测试很有帮助,同时不会破坏生产版本的任何内容。我希望这可以为我的同行们省去一些麻烦。

      【讨论】:

        【解决方案3】:

        您可以使用yalc。 Yalc 将模拟一个包发布而不实际发布它。

        全局安装:

        npm i -g yalc

        在您的本地包中:

        yalc publish

        在应用程序中:

        yalc add package-name && yarn

        对包进行一些更改后,您可以运行

        yalc push

        它会自动更新每个使用本地包的应用

        【讨论】:

          猜你喜欢
          • 2016-05-20
          • 1970-01-01
          • 2019-09-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多