问题
I had my ionic 2 project in my linux mission when i coped and moved to the mac which has ionic 3.
So i created a new project and replaced the pages, provides, components folder with the new project i was getting error like cannot find module "ionic-native"
after importing my plugins into app.modulte.ts file i am getting as error as 'Type 'any' is not a constructor function type.`
my terminal shows
17:39:48] typescript: node_modules/@ionic-native/app-version/index.d.ts, line: 25
Type 'any' is not a constructor function type. [17:39:48] typescript: node_modules/@ionic-native/geolocation/index.d.ts, line: 127 [17:39:48] typescript: node_modules/@ionic-native/google-analytics/index.d.ts, line: 30 [17:39:48] typescript: node_modules/@ionic-native/network/index.d.ts, line: 49 [17:39:48] typescript: node_modules/@ionic-native/sms/index.d.ts, line: 41 [17:39:48] typescript: node_modules/@ionic-native/social-sharing/index.d.ts, line: 29 [17:39:48] typescript: node_modules/@ionic-native/sqlite/index.d.ts, line: 115
L25: export declare class AppVersion extends IonicNativePlugin {
Type 'any' is not a constructor function type.
L127: export declare class Geolocation extends IonicNativePlugin {
Type 'any' is not a constructor function type.
L30: export declare class GoogleAnalytics extends IonicNativePlugin {
Type 'any' is not a constructor function type.
L49: export declare class Network extends IonicNativePlugin {
Type 'any' is not a constructor function type.
L41: export declare class SMS extends IonicNativePlugin {
Type 'any' is not a constructor function type.
L29: export declare class SocialSharing extends IonicNativePlugin {
Type 'any' is not a constructor function type.
L115: export declare class SQLite extends IonicNativePlugin {
[17:39:48] dev server running: http://localhost:8100/
in my browser i am getting error like
here is my package.json file
{
"name": "ionic-hello-world",
"version": "0.0.0",
"author": "Ionic Framework",
"homepage": "http://ionicframework.com/",
"private": true,
"scripts": {
"clean": "ionic-app-scripts clean",
"build": "ionic-app-scripts build",
"ionic:build": "ionic-app-scripts build",
"ionic:serve": "ionic-app-scripts serve"
},
"dependencies": {
"@angular/common": "4.0.2",
"@angular/compiler": "4.0.2",
"@angular/compiler-cli": "4.0.2",
"@angular/core": "4.0.2",
"@angular/forms": "4.0.2",
"@angular/http": "4.0.2",
"@angular/platform-browser": "4.0.2",
"@angular/platform-browser-dynamic": "4.0.2",
"@ionic-native/app-version": "^3.6.1",
"@ionic-native/geolocation": "^3.6.1",
"@ionic-native/google-analytics": "^3.6.1",
"@ionic-native/network": "^3.6.1",
"@ionic-native/sms": "^3.6.1",
"@ionic-native/social-sharing": "^3.6.1",
"@ionic-native/splash-screen": "3.4.2",
"@ionic-native/sqlite": "^3.6.1",
"@ionic-native/status-bar": "3.4.2",
"@ionic/storage": "2.0.1",
"ionic-angular": "3.1.1",
"ionicons": "3.0.0",
"rxjs": "5.1.1",
"sw-toolbox": "3.4.0",
"zone.js": "^0.8.5"
},
"devDependencies": {
"@ionic/app-scripts": "1.3.6",
"typescript": "~2.2.1"
},
"cordovaPlugins": [
"cordova-plugin-whitelist",
"cordova-plugin-statusbar",
"cordova-plugin-console",
"cordova-plugin-device",
"cordova-plugin-splashscreen",
"ionic-plugin-keyboard",
"cordova-plugin-android-permissions",
"cordova-plugin-app-version",
"cordova-plugin-geolocation",
"cordova-plugin-google-analytics",
"cordova-plugin-network-information",
"cordova-plugin-sms",
"cordova-plugin-x-socialsharing",
"cordova-sqlite-storage"
],
"cordovaPlatforms": [
"ios",
{
"platform": "ios",
"version": "",
"locator": "ios"
}
],
"description": "kmart: An Ionic project"
}
after using npm install @ionic-native/core --save
i am getting error like
回答1:
To use ionic-native
3.x you need to install @ionic-native/core
.
npm install @ionic-native/core@3.6.1 --save
回答2:
I had @ionic-native/core ^3.6.0
in my package.json. For me the problem was solved by importing my plugins like
import {File, Transfer, FilePath} from "ionic-native";
instead of
import {FilePath} from "@ionic-native/file-path";
import {Transfer} from "@ionic-native/transfer";
import {File} from "@ionic-native/file";
回答3:
yesterday i was facing the same issue after updating my pretty old version to a new one. I had to perform a lot of steps to make it work in the end. Here is what i needed to do, or how i solved it. First i created a 'dummy' project
ionic start myApp tabs
i opened the package.json
and compared all the versions to my current one and updated them accordingly (you might want to use npm outdated
to see the latest and your installed versions).
Unfortunately that did not solve my issue, i could build my project, but i got the same error like you cannot find module "ionic-native"
after starting.
After reading a lot of posts and hints, i did the following (there were lots of other errors coming up and this is how i solved all of them).
Open the app.module.ts
and check your imports
Before:
imports: [
IonicModule.forRoot(MyApp),
Ionic2RatingModule
]
After:
imports: [
BrowserModule,
IonicModule.forRoot(MyApp),
Ionic2RatingModule,
HttpModule /* in case you used http before */
]
The next important step is to search your whole code forimport from "ionic-native"
In case you find something like that, you have to change / update it to the new version. (Typically that is for the splashScreen and the statusBar in you app.component.ts)
Before:
import { StatusBar, Splashscreen } from 'ionic-native';
@Component({
templateUrl: 'app.html'
})
export class MyApp {
rootPage = HomePage;
constructor(platform: Platform) {
platform.ready().then(() => {
// Okay, so the platform is ready and our plugins are available.
// Here you can do any higher level native things you might need.
StatusBar.styleDefault();
Splashscreen.hide();
});
platform.pause.subscribe(e=>{
})
}
}
After:
import {StatusBar} from "@ionic-native/status-bar";
import {SplashScreen} from "@ionic-native/splash-screen";
@Component({
templateUrl: 'app.html'
})
export class MyApp {
rootPage = HomePage;
constructor(platform: Platform, statusBar: StatusBar, splashScreen: SplashScreen) {
platform.ready().then(() => {
// Okay, so the platform is ready and our plugins are available.
// Here you can do any higher level native things you might need.
statusBar.styleDefault();
splashScreen.hide();
});
platform.pause.subscribe(e => {
})
}
}
Check the constructor and the imports, they changed!
I had to do all those changes for everything which was imported via MODULE import from "ionic-native"
like for example: StatusBar, SplashScreen, Camera, Network, Transfer, Geolocation ...
Also keep in mind that now you have to add them to the providers
section in your app.module.ts
In case you cannot find a module anymore (like it happened to me for the Camera), make sure you import the correct ionic module npm install --save @ionic-native/camera
At the very end, you should not find any
MODULE import from "ionic-native"
again in your code.
Hope it helps somebody :)
来源:https://stackoverflow.com/questions/43759991/ionic-3-type-any-is-not-a-constructor-function-type