【问题标题】:Once i create and use own module then it will gives error like: Unable to resolve module一旦我创建并使用自己的模块,它就会给出如下错误:无法解析模块
【发布时间】:2019-07-25 11:00:22
【问题描述】:

我是 react-native 的新手,我第一次创建了自己的模块 (npm)。

我尝试为常用组件创建自己的模块(npm),并且单独工作正常。但是,一旦我安装,将其链接到我们的应用程序中,并尝试使用这些组件,它会给出如下错误:

 Unable to resolve module `<Module-name>` from `<file>`: Module `<Module-name>` does not exist in the Haste module map. 

(注意:我仅使用 Android Emulator 进行了测试)

我已按照以下步骤创建模块和测试应用程序

对于模块

  1. react-native init &lt;module-name&gt;
  2. 在mainindex.js中添加组件的简单代码
  3. 并像这样设置 pacakge.json:

    {
      "name": "<module-name>",
      "version": "0.0.1",
      "private": true,
      "main": "index.js",
      "scripts": {
        "start": "react-native start",
        "test": "jest",
        "lint": "eslint .",
        "build": "echo 'build script executed'"
      },
      "dependencies": {
        "react": "16.8.6",
        "react-native": "0.60.4"
      },
    

现在我检查这个组件(react-native run-android),它可以正常工作。

现在我尝试通过以下步骤在应用中使用

测试应用

  1. 创建新应用 (react-native init &lt;app-name&gt;)
  2. 使用完整路径安装创建的 npm;

    npm install <full path of component>
    
  3. 现在我尝试react-native link &lt;full path of component&gt;,我也尝试过简单的react-native link,但没有任何反应。

  4. 现在我使用react-native run-android 运行应用程序,但是每次它都会给出同样的错误;

    Unable to resolve module <created-module name>
    

测试应用package.json

{
  "name": "<app-name>",
  "version": "0.0.1",
  "private": true,
  "scripts": {
    "start": "react-native start",
    "test": "jest",
    "lint": "eslint ."
  },
  "dependencies": {
    "react": "16.8.6",
    "react-native": "0.60.4",
    "react-native-my-library": "^1.0.2",
    "<created-module-name>": "file:../<created-module-name>"
  },
  "devDependencies": {
    "@babel/core": "7.5.5",
    "@babel/runtime": "7.5.5",
    "@react-native-community/eslint-config": "0.0.3",
    "babel-jest": "24.8.0",
    "eslint": "6.1.0",
    "jest": "24.8.0",
    "metro-react-native-babel-preset": "0.54.1",
    "react-test-renderer": "16.8.6"
  },
  "jest": {
    "preset": "react-native"
  }
}

创建的模块安装成功,但我认为它没有正确链接,它会报错。

那么这里有什么问题呢?

请给我建议/帮助。

谢谢。

【问题讨论】:

  • 你的模块有android&ios文件夹吗?大多数时候react-native link 不适用于本机库。你必须自己做。
  • @firats 模块适用于 android 和 ios,实际上它不是特定的 android 和 ios,我也尝试过 react-native 链接 但在 android 中没有任何改变,比如 gradlefile,设置。毕业典礼等。
  • 你找到解决办法了吗?

标签: react-native npm


【解决方案1】:

我假设您的模块已成功发布在 npm 存储库中。否则不能使用npm install &lt;full path of component&gt;

如果你正在使用

npm install &lt;full path of component&gt;

从 npm repo 将模块安装到测试应用程序的命令。在你的 package.json 中指定,如

"<created-module-name>": "file:../<created-module-name>"

错误。您需要从 package.json 中删除该行并尝试安装;

npm install --save <full path of component>

这将自动在您的 package.json 中创建一行。您现在可以手动链接您的模块。

对于手动链接,您可以关注guide

已编辑:

如果您在本地计算机上使用,

那就不用npm install了。

只需将您的模块复制到您的项目node_modules 文件夹中。 然后在你的 package.json 中添加;

"dependencies": {
   ...
   "your_module_name": "your_module_version"
   ...
}

然后,您只需按照我上面提到的手动链接过程。

【讨论】:

  • 我还没有发布我的模块,我只是在本地电脑上使用过。关于 package.json,这一行 "": "file:../" 自动创建。
  • 根据您的回答,我按照步骤然后解决“无法解析模块”的错误。但是,一旦我在测试应用程序中使用组件,我仍然面临一个问题,请查看下面的屏幕截图:错误:prnt.sc/ok85mu Module package,json prnt.sc/ok8528 Created simpale text Component App.js prnt.sc/ok84t0 Test app package.json @987654325 @ 使用 crated 组件 App.js prnt.sc/ok846a @firats
  • 从您的屏幕截图中可以看出,您为组件创建了一个新项目而不是库,然后您尝试将其导入主项目。这是错误的做法。您只是不能将 react-native 项目导入另一个项目。你应该创建一个 react-native-library 来做到这一点。从你的项目中删除你的模块,然后你可以用这种方式创建新的库,react-native-create-library。之后再次按照我的回答。
  • 好吧,让我试试。 @firats
  • 创建后不要忘记从库中删除 android&ios 文件夹。因为你只想使用一个 jsx 文本组件。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-04-19
  • 1970-01-01
  • 1970-01-01
  • 2017-03-22
  • 2018-06-29
  • 1970-01-01
相关资源
最近更新 更多