【问题标题】:Import local packages as modules not in the React-Native project将本地包导入为不在 React-Native 项目中的模块
【发布时间】:2017-08-15 15:15:54
【问题描述】:

在一个 React-Native 项目中,我发现如果你的本地包有一个有效的 package.json 文件,你可以像 node_modules 中的模块一样导入它,而不需要相对路径。

例如,

app/                             # a React-Native project
  |- any_folder_for_packages/
  |   |- foo/
  |       |- package.json
  |       |- index.js
  |- src/
  |   |- bar/
  |       |- bar.js
  |- ...

在这种情况下,您可以使用以下任一方法在 bar.js 中导入包 foo

// with a relative path
import foo from '../../any_folder_for_packages/foo';

// like a module (without a relative path)
import foo from 'foo';

打包程序将尝试查找并使用任何包含符合要求的package.json 的本地模块。

问题

我有一个本地包,它不在 React-Native 项目中,我该如何导入它

projects/
  |- app/                # a React-Native project
  |   |- src/
  |   |   |- bar/
  |   |       |- bar.js  # need to import the package foo as a module which is not in this project
  |   |- ...
  |- other_paths/
      |- foo/
          |- package.json
          |- index.js

我尝试使用

// like a module (without a relative path)
import foo from 'foo';

但它未能找到该模块。

在为开发打包或为生产打包时如何使用react-native 查找包?

【问题讨论】:

    标签: react-native webpack lerna


    【解决方案1】:

    您需要通过您的根 package.json 文件让您的应用程序知道它。

    确认本地模块已配置基本package.json

    例如:

    {
      "name": "foo", 
      "version": "0.0.1"
    }
    

    确保包有一个 index.js 并且它有一些导出或导出默认值。

    例如在index.js的底部:

    export default foo;

    然后,只需将包保存为根模块中的项目依赖项即可通过 NPM。要执行此操作并将其自动安装到您的 node_modules 中,您可以使用此命令。

    npm install --save file:other_paths/foo
    

    注意确保您的常规项目 package.json 模块package.json 的相对路径正确。 p>

    例如,在这种情况下是:

    app/                          # a React-Native project root
      |- other_paths/  
      |   |- foo/
      |      |- package.json      # new module package json
      |      |- index.js
      |- src/
      |   |- bar/
      |       |- bar.js
      |- package.json             # project package json
    

    如果设置正确,您应该可以在项目中的任何位置引用该模块,而无需相对路径。

    import Foo from 'foo';

    【讨论】:

    • 我可以确认这不起作用。它只会产生“找不到模块”错误。说明有误或不完整。
    • @FirzokNadeem ...我已经修改了答案,希望这会有所帮助。
    • @user1258361 ...我已经修改了答案,希望这会有所帮助。
    猜你喜欢
    • 2016-05-25
    • 2018-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-13
    相关资源
    最近更新 更多