As mentioned in the accepted answer, the official vue package is the way to go. Even with the official package, there were a number of issues once I pulled it into Nuxt.
Here's a set. by step of how I got it working. Here are the versions of everything involved:
"tinymce": "^5.10.3",
"@tinymce/tinymce-vue": "^3.2.8",
"vue": "^2.6.11",
"nuxt": "2.15.8",
The tinymce-vue package requires a tinymce to be available. You can either install it via npm like above, or use the cloud-hosted version (see Prerequisites here).
Nuxt-specific Issues
You'll need to ensure the component is wrapped in the <client-only> tag to avoid SSR errors.
Additionally, if self-hosting the tinymce package, you'll want to only import it on the client-side. Otherwise you will see errors like:
[Vue warn]: Failed to resolve async component: ... Reason: ReferenceError: navigator is not defined
You can do this by using require and if (process.client) { around them.
Ex:
if (process.client) {
require('tinymce/tinymce')
require('tinymce/themes/silver')
require('tinymce/icons/default')
require('tinymce/plugins/lists') // do this for any plugins you use on the editor
}
import Editor from '@tinymce/tinymce-vue'
At this point the editor should be loading on your page, but styles are probably not loading.
You can fix this by adding require('tinymce/skins/ui/oxide/skin.min.css') below the other requires.
Now the styles will be fixed but the tinymce theme will still look for other CSS files like mobile, min versions on its own, and cause network errors.
Ex:
404 http://localhost:3000/_nuxt/skins/ui/oxide/content.min.css
404 http://localhost:3000/_nuxt/skins/ui/oxide/skin.min.css
For content:
You can either copy that file to the static folder with the same path, or override them with the content_css setting (in the Vue component init options).
For skin:
Since you already provided it as a module, set skin: false in the Vue component init options.