1.自己创建的工程
在终端直接使用:react-native init项目名称。
2. github上的项目
需要在终端进入github项目目录下运行 npm install 或 npm update
等安装完了以后查看项目下面有node_modules文件夹跟package.json同级目录,项目正常可以运行起来。
错误一
如果你的环境是 React Native 0.32以下版本 ,Xcode8 会报错
RCTSRWebSocket.m报错
Ignoring return value of function declared with warn_unused_result attribute
这个报错在此文件中有两处,代码
SecRandomCopyBytes(kSecRandomDefault, sizeof(uint32_t), (uint8_t *)mask_key);
修改为
(void)SecRandomCopyBytes(kSecRandomDefault, sizeof(uint32_t), (uint8_t *)mask_key);
前面加上
(void)
。
RCTScrollView.m 报错
Use of undeclared identifier '_refreshControl'; did you mean 'refreshControl'?
@implementation RCTCustomScrollView
{
__weak UIView *_dockedHeaderView;
RCTRefreshControl *_refreshControl; // 加入此行
}
错误二
如果出现下面错误,
建议将 192.168.25.13 改为localhost,便于开发。
错误三
在Other Linker Flags中添加-lc++即可
错误四
解决方案 点击打开链接
或 删除node_modules 使用 nam install 重新配置。
3. npm install
npm install <name>安装nodejs的依赖包
例如npm install express 就会默认安装express的最新版本,也可以通过在后面加版本号的方式安装指定版本,如npm install [email protected]
npm install <name> -g 将包安装到全局环境中
但是代码中,直接通过require()的方式是没有办法调用全局安装的包的。全局的安装是供命令行使用的,就好像全局安装了vmarket后,就可以在命令行中直接运行vm命令
npm install <name> --save 安装的同时,将信息写入package.json中
项目路径中如果有package.json文件时,直接使用npm install方法就可以根据dependencies配置安装所有的依赖包
这样代码提交到github时,就不用提交node_modules这个文件夹了。
npm init 会引导你创建一个package.json文件,包括名称、版本、作者这些信息等
npm remove <name>移除
npm update <name>更新
npm ls 列出当前安装的了所有包
npm root 查看当前包的安装路径
npm root -g 查看全局的包的安装路径
npm help 帮助,如果要单独查看install命令的帮助,可以使用的npm help install
4.package.json作用
文件描述了一个NPM包的所有相关信息,包括作者、简介、包依赖、构建等信息。格式必须是严格的JSON格式。
通常我们在创建一个NPM程序时,可以使用
命令,通过交互式的命令,自动生成一个 文件,里面包含了常用的一些字段信息,但远不止这么简单。通过完善 文件,我们可以让 命令更好地为我们服务。name
和 是package.json中最重要的两个字段,也是发布到NPM平台上的唯一标识,如果没有正确设置这两个字段,包就不能发布和被下载。
下面是官方给出的一些建议:
- 名字里不要再包含"js"和"node",因为默认NPM包就是node.js程序,不过你可以通过 字段来指定。
- 名字将会被作为url的一部分,所有要符合http url的一般命名规则,不能包含url非法字符,也不能以 和 开头。
- 名字也将作为 命令的参数,所以应该尽量简明。
- 如果包要发布到NPM平台上的话,最好先检查下有没有重名, 并且字母只能全部小写。
新版本的NPM可以指定scope, 名字可以加前缀标识,如
。version
这个字段的取值需要符合node-semver的规则,详细可以见其文档。
description
包的描述信息,将会在
的返回结果中显示,以帮助用户选择合适的包。keywords
包的关键词信息,是一个字符串数组,同上也将显示在
的结果中。homepage
包的主页地址
bugs
包的bug跟踪主页地址,应该如下设置:
bugs: {
"url": "http://github.com/ijse/project/issues",
"email": "[email protected]"
}
license
包的开源协议名称
author
包的作者,可以是字符串或对象:
author: {
"name": "ijse",
"email": "[email protected]",
"url": "http://www.ijser.cn"
}
或者:
author: "ijse <[email protected]> (http://www.ijser.cn)"
contributors, maintainers
包的贡献者,是一个数组。
files
包所包含的所有文件,可以取值为文件夹。
通常我们还是用
来去除不想包含到包里的文件。main
包的入口文件,如
bin
如果你的包里包含可执行文件,通过设置这个字段可以将它们包含到系统的
中,这样直接就可以运行,很方便。如:"bin": {
"iapp": "./cli.js"
}
当包被安装后,NPM将创建一个
文件的链接到 下。man
为系统的
命令提供帮助文档, 如:"man": "./man/doc.1"
帮助文件的文件名必须以
结尾,如果是压缩的,需要以 结尾。如果是字符串数组:
"name": "foo",
"man": ["./man/foo.1", "./man/bar.1", "./man/foo.2" ]
则分别可以
, , 来查看。directories
CommonJS包所要求的目录结构信息,目前除了告诉别人你的程序目录结构,貌似没有别的什么用。
下级字段可以是:lib, bin, man, doc, example。 每个都是字符串
repository
包的仓库地址。如:
"repository": {
"type": "git",
"url": "http://github.com/ijse/project.git"
}
scripts
通过设置这个可以使NPM调用一些命令脚本,封装一些功能。
config
添加一些设置,可以供
读取用,同时这里的值也会被添加到系统的环境变量中。"name": "foo",
"config": {
"port": "8080"
}
的时候会读取到 环境变量。
同时也可以使用
命令来修改设置:npm config set foo:port 8001
dependencies
指定依赖的其它包,这些依赖是指包发布后正常执行时所需要的,如果是开发中依赖的包,可以在
设置。通常使用下面命令来安装:
npm install --save otherpackage
形式可以有如下多种:
- 严格匹配某个版本
- 必须大于某个版本
- 大概匹配某个版本
- 兼容某个版本
- 可以是1.2.0, 1.2.1等等,但不能是1.3.0
- 指定tarball的url地址
- 任何版本都可以
- 同上
- >=version1 <=version2
- 满足range1 或range2
- git地址
- 同上
- 指定某个tag的版本
- 本地包所有文件夹
下面都是可以用的:
{ "dependencies" :
{ "foo" : "1.0.0 - 2.9999.9999"
, "bar" : ">=1.0.2 <2.1.2"
, "baz" : ">1.0.2 <=2.3.4"
, "boo" : "2.0.1"
, "qux" : "<1.0.0 || >=2.3.1 <2.4.5 || >=2.5.2 <3.0.0"
, "asd" : "http://asdf.com/asdf.tar.gz"
, "til" : "~1.2"
, "elf" : "~1.2.3"
, "two" : "2.x"
, "thr" : "3.3.x"
, "lat" : "latest"
, "dyl" : "file:../dyl"
}
}
Git URL可以有如下种形式:
git://github.com/user/project.git#commit-ish
git+ssh://user@hostname:project.git#commit-ish
git+ssh://user@hostname/project.git#commit-ish
git+http://user@hostname/project/blah.git#commit-ish
git+https://user@hostname/project/blah.git#commit-ish
devDependencies
这些依赖只有在开发时候才需要。
npm install --save-dev mypack
peerDependencies
相关的依赖,如果你的包是插件,而用户在使用你的包时候,通常也会需要这些依赖(插件),那么可以将依赖列到这里。
举个例子,如
, 它的 中有设置:"peerDependencies": {
"karma-jasmine": "~0.1.0",
"karma-requirejs": "~0.2.0",
"karma-coffee-preprocessor": "~0.1.0",
"karma-html2js-preprocessor": "~0.1.0",
"karma-chrome-launcher": "~0.1.0",
"karma-firefox-launcher": "~0.1.0",
"karma-phantomjs-launcher": "~0.1.0",
"karma-script-launcher": "~0.1.0"
}
这些都是
的相关插件,一般使用 的时候都会需要。bundledDependencies
绑定的依赖包,发布的时候这些绑定包也会被一同发布。
optionalDependencies
即使这些依赖没有,也可以正常安装使用
engines
指定包运行的环境
"engines": {
"node": ">=0.10.3 < 0.12",
"npm": "~1.0.20"
}
engineStrict
设置为
强制限定os
指定你的包可以在哪些系统平台下运行。
"os": [ "darwin", "linux", "!win32" ]
即可以在
和 平台下运行,而不能在 下。这里设定的取值是来自 的。cpu
可以指定包运行的cpu架构,如
"cpu": [ "x64", "!arm" ]
取值来自
。preferGlobal
如果你的包是命令行运行的,那可以将其设置为
建议用户全局( )安装。但它并不强制用户。private
设为
这个包将不会发布到NPM平台下。publishConfig
这个字段用于设置发布时候的一些设定。尤其方便你希望发布前设定指定的
或 。也可以设定其它子字段,但只有
和 会影响到发布。NPM的一些默认值说明
如果在项目根目录下含有
文件,则NPM会自动设置此值。如果项目根目录下含有
文件,则NPM会自动将每一行以 的格式读取并设定此字段。