Reputation: 2617
I've been struggling for a couple days now to get Typescript working in a simple template-generated Nativescript-Vue project. Here's what I've done:
vue init nativescript-vue/vue-cli-template typescript2
Followed the instructions here: https://nativescript-vue.org/blog/using-typescript-in-nativescript-vue/
Added an env.d.ts file with the contents:
declare var TNS_ENV: string;
declare module '*.vue' { import Vue from 'vue' export default Vue }
{ test: /\.ts$/, exclude: /node_modules|vue\/src/, loader: "ts-loader", options: { appendTsSuffixTo: [/\.vue$/] } },
tns run android --bundle
This results in the following errors:
ERROR in Entry module not found: Error: Can't resolve './main.js' in '/Data/dev/test/Nativescript/typescript2/app'
Webpack compilation complete. Watching for file changes.
Webpack build done!
Executing before-shouldPrepare hook from /Data/dev/test/Nativescript/typescript2/hooks/before-shouldPrepare/nativescript-dev-webpack.js
Preparing project...
Executing before-prepareJSApp hook from /Data/dev/test/Nativescript/typescript2/hooks/before-prepareJSApp/nativescript-dev-webpack.js
Project successfully prepared (Android)
Executing after-prepare hook from /Data/dev/test/Nativescript/typescript2/hooks/after-prepare/nativescript-dev-webpack.js
Building project...
Gradle build...
+ setting applicationId
+ applying user-defined configuration from /Data/dev/test/Nativescript/typescript2/app/App_Resources/Android/app.gradle
Using support library version 28.0.0
+ adding nativescript runtime package dependency: nativescript-optimized-with-inspector
+ adding aar plugin dependency: /Data/dev/test/Nativescript/typescript2/node_modules/nativescript-socket.io/platforms/android/nativescript_socket.io.aar
+ adding aar plugin dependency: /Data/dev/test/Nativescript/typescript2/node_modules/tns-core-modules-widgets/platforms/android/widgets-release.aar
(node:3079) [DEP0005] DeprecationWarning: Buffer() is deprecated due to security and usability issues. Please use the Buffer.alloc(), Buffer.allocUnsafe(), or Buffer.from() methods instead.
java.io.FileNotFoundException: /Data/dev/test/Nativescript/typescript2/platforms/android/build-tools/sbg-bindings.txt (No such file or directory)
at java.io.FileInputStream.open0(Native Method)
at java.io.FileInputStream.open(FileInputStream.java:195)
at java.io.FileInputStream.<init>(FileInputStream.java:138)
at java.io.FileInputStream.<init>(FileInputStream.java:93)
at org.nativescript.staticbindinggenerator.Generator.getRows(Generator.java:145)
at org.nativescript.staticbindinggenerator.Generator.generateBindings(Generator.java:85)
at org.nativescript.staticbindinggenerator.Generator.writeBindings(Generator.java:63)
at org.nativescript.staticbindinggenerator.Main.main(Main.java:48)
Project successfully built.
Installing on device FA7A11A03046...
Successfully installed on device with identifier 'FA7A11A03046'.
Refreshing application on device FA7A11A03046...
System.err: java.lang.RuntimeException: Unable to create application com.tns.NativeScriptApplication: com.tns.NativeScriptException:
System.err:
System.err: Error calling module function
System.err:
System.err: Error: com.tns.NativeScriptException: Failed to find module: "./vendor", relative to: app/
System.err: com.tns.Module.resolvePathHelper(Module.java:146)
System.err: com.tns.Module.resolvePath(Module.java:55)
System.err: com.tns.Runtime.runModule(Native Method)
System.err: com.tns.Runtime.runModule(Runtime.java:553)
System.err: com.tns.Runtime.run(Runtime.java:545)
System.err: com.tns.NativeScriptApplication.onCreate(NativeScriptApplication.java:21)
System.err: android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1154)
System.err: android.app.ActivityThread.handleBindApplication(ActivityThread.java:5882)
System.err: android.app.ActivityThread.access$1100(ActivityThread.java:200)
System.err: android.app.ActivityThread$H.handleMessage(ActivityThread.java:1651)
System.err: android.os.Handler.dispatchMessage(Handler.java:106)
System.err: android.os.Looper.loop(Looper.java:193)
System.err: android.app.ActivityThread.main(ActivityThread.java:6680)
System.err: java.lang.reflect.Method.invoke(Native Method)
System.err: com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
System.err: com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
System.err: File: "<unknown>, line: 1, column: 265
System.err:
System.err: StackTrace:
System.err: Frame: function:'require', file:'', line: 1, column: 266
System.err: Frame: function:'', file:'file:///data/data/org.nativescript.application/files/app/starter.js', line: 1, column: 61
System.err: Frame: function:'require', file:'', line: 1, column: 266
System.err:
System.err:
System.err: Error: com.tns.NativeScriptException: Failed to find module: "./vendor", relative to: app/
System.err: com.tns.Module.resolvePathHelper(Module.java:146)
System.err: com.tns.Module.resolvePath(Module.java:55)
System.err: com.tns.Runtime.runModule(Native Method)
System.err: com.tns.Runtime.runModule(Runtime.java:553)
System.err: com.tns.Runtime.run(Runtime.java:545)
System.err: com.tns.NativeScriptApplication.onCreate(NativeScriptApplication.java:21)
System.err: android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1154)
System.err: android.app.ActivityThread.handleBindApplication(ActivityThread.java:5882)
System.err: android.app.ActivityThread.access$1100(ActivityThread.java:200)
System.err: android.app.ActivityThread$H.handleMessage(ActivityThread.java:1651)
System.err: android.os.Handler.dispatchMessage(Handler.java:106)
System.err: android.os.Looper.loop(Looper.java:193)
System.err: android.app.ActivityThread.main(ActivityThread.java:6680)
System.err: java.lang.reflect.Method.invoke(Native Method)
System.err: com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
System.err: com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
System.err: File: "<unknown>, line: 1, column: 265
System.err:
System.err: StackTrace:
System.err: Frame: function:'require', file:'', line: 1, column: 266
System.err: Frame: function:'', file:'file:///data/data/org.nativescript.application/files/app/starter.js', line: 1, column: 61
System.err: Frame: function:'require', file:'', line: 1, column: 266
System.err:
System.err: at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5887)
System.err: at android.app.ActivityThread.access$1100(ActivityThread.java:200)
System.err: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1651)
System.err: at android.os.Handler.dispatchMessage(Handler.java:106)
System.err: at android.os.Looper.loop(Looper.java:193)
System.err: at android.app.ActivityThread.main(ActivityThread.java:6680)
System.err: at java.lang.reflect.Method.invoke(Native Method)
System.err: at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
System.err: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
System.err: Caused by: com.tns.NativeScriptException:
System.err:
System.err: Error calling module function
System.err:
System.err: Error: com.tns.NativeScriptException: Failed to find module: "./vendor", relative to: app/
System.err: com.tns.Module.resolvePathHelper(Module.java:146)
System.err: com.tns.Module.resolvePath(Module.java:55)
System.err: com.tns.Runtime.runModule(Native Method)
System.err: com.tns.Runtime.runModule(Runtime.java:553)
System.err: com.tns.Runtime.run(Runtime.java:545)
System.err: com.tns.NativeScriptApplication.onCreate(NativeScriptApplication.java:21)
System.err: android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1154)
System.err: android.app.ActivityThread.handleBindApplication(ActivityThread.java:5882)
System.err: android.app.ActivityThread.access$1100(ActivityThread.java:200)
System.err: android.app.ActivityThread$H.handleMessage(ActivityThread.java:1651)
System.err: android.os.Handler.dispatchMessage(Handler.java:106)
System.err: android.os.Looper.loop(Looper.java:193)
System.err: android.app.ActivityThread.main(ActivityThread.java:6680)
System.err: java.lang.reflect.Method.invoke(Native Method)
System.err: com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
System.err: com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
System.err: File: "<unknown>, line: 1, column: 265
System.err:
System.err: StackTrace:
System.err: Frame: function:'require', file:'', line: 1, column: 266
System.err: Frame: function:'', file:'file:///data/data/org.nativescript.application/files/app/starter.js', line: 1, column: 61
System.err: Frame: function:'require', file:'', line: 1, column: 266
System.err:
System.err:
System.err: Error: com.tns.NativeScriptException: Failed to find module: "./vendor", relative to: app/
System.err: com.tns.Module.resolvePathHelper(Module.java:146)
System.err: com.tns.Module.resolvePath(Module.java:55)
System.err: com.tns.Runtime.runModule(Native Method)
System.err: com.tns.Runtime.runModule(Runtime.java:553)
System.err: com.tns.Runtime.run(Runtime.java:545)
System.err: com.tns.NativeScriptApplication.onCreate(NativeScriptApplication.java:21)
System.err: android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1154)
System.err: android.app.ActivityThread.handleBindApplication(ActivityThread.java:5882)
System.err: android.app.ActivityThread.access$1100(ActivityThread.java:200)
System.err: android.app.ActivityThread$H.handleMessage(ActivityThread.java:1651)
System.err: android.os.Handler.dispatchMessage(Handler.java:106)
System.err: android.os.Looper.loop(Looper.java:193)
System.err: android.app.ActivityThread.main(ActivityThread.java:6680)
System.err: java.lang.reflect.Method.invoke(Native Method)
System.err: com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
System.err: com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
System.err: File: "<unknown>, line: 1, column: 265
System.err:
System.err: StackTrace:
System.err: Frame: function:'require', file:'', line: 1, column: 266
System.err: Frame: function:'', file:'file:///data/data/org.nativescript.application/files/app/starter.js', line: 1, column: 61
System.err: Frame: function:'require', file:'', line: 1, column: 266
System.err:
System.err: at com.tns.Runtime.runModule(Native Method)
System.err: at com.tns.Runtime.runModule(Runtime.java:553)
System.err: at com.tns.Runtime.run(Runtime.java:545)
System.err: at com.tns.NativeScriptApplication.onCreate(NativeScriptApplication.java:21)
System.err: at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1154)
System.err: at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5882)
System.err: ... 8 more
Successfully synced application org.nativescript.application on device FA7A11A03046.
^[[A^CExecuting after-watch hook from /Data/dev/test/Nativescript/typescript2/hooks/after-watch/nativescript-dev-webpack.js
Stopping webpack watch
Executing after-watch hook from /Data/dev/test/Nativescript/typescript2/hooks/after-watch/nativescript-dev-webpack.js
Stopping webpack watch
Is there anything I'm missing? I'd love to have the benefits of Typescript in a Nativescript-Vue project I'm about to start.
This is with the following versions:
Nativescript CLI: 5.0.3
Nativescript-Vue: 2.0.2
Webpack: 4.27.1
UPDATE: Quick note, when creating the app in step 1, I chose Simple template, installed VueX, and installed Vue-Devtools.
Upvotes: 3
Views: 2996
Reputation: 176
If you like templates with out of the box support for nativescript navigator (router), vuex, typescript/eslint, prettier, and structured using module-oriented approach (https://mnapoli.fr/organizing-code-into-domain-modules/) for easy maintenance as your app grows, you may clone our open-source project: https://github.com/Lyduz/nitibo
Upvotes: 0
Reputation: 73
There is also now a Vue CLI 3 plugin for Nativescript-Vue that will scaffold out an entire project in Javascript or Typescript and then utilize the Vue CLI 3 infrastructure to help you. Disclaimer: I'm the primary contributor to the current state of the plugin.
It also includes the ability to have code sharing between web and native projects or you can proceed with just a native only project.
You can utilize the CLI 3 UI experience or use the terminal. Either way, you can do the following:
vue create my-app
and then in the prompts, choose Typescript.vue add vue-cli-plugin-nativescript-vue
.Upvotes: 3
Reputation: 140
Update (30-Jan-2019): Good news - I think they are adding out-of-the-box support for Typescript with the template in this PR.
So from now on we should be able to choose Typescript
as the language option when bootstrapping the project with the template.
I had encountered the same problem and here is what I did to add TypeScript to my Nativescript-Vue project. (I do not have enough reputation to add a comment so I have to post this as an answer)
vue init nativescript-vue/vue-cli-template <project-name>
webpack.config.js
during the project creation and I was asked to run ./node_modules/.bin/update-ns-webpack --configs
tns preview
so I had disabled it as welltypescript
and vue
as devDependenciesapp/main.js
to app/main.ts
app/main.ts
, change import App from './components/App'
to import App from './components/App.vue'
tsconfig.json
(copied from this stater project AND commented out "strict": true,
)webpack.config.js
, add 'vue$': 'nativescript-vue'
under alias
and exclude: /node_modules|vue\/src/,
under module.rules
(to the one for ts
- details here)env.d.ts
and shims.vue.d.ts
under types/
folder accordingly (Note that in the tsconfig.json
file I copied, it had defined "typeRoots": ["types"]
)tns preview --bundle
tns run android --bundle
Hope the above can help.
Versions used are as follow:
Upvotes: 3