diff --git a/packages/@vue/cli-service/__tests__/buildLib.spec.js b/packages/@vue/cli-service/__tests__/buildLib.spec.js
index 6e8b8e296b..4476f15e53 100644
--- a/packages/@vue/cli-service/__tests__/buildLib.spec.js
+++ b/packages/@vue/cli-service/__tests__/buildLib.spec.js
@@ -174,3 +174,43 @@ test('build as lib with --filename option', async () => {
     return window.testLib.bar
   })).toBe(2)
 })
+
+test('build as lib without --name and --filename options (default to package name)', async () => {
+  const project = await create('build-lib-no-name-and-filename-option', defaultPreset)
+  await project.write('package.json', `
+      {
+        "name": "test-lib"
+      }
+    `)
+  await project.write('src/main.js', `
+      export default { foo: 1 }
+      export const bar = 2
+    `)
+  const { stdout } = await project.run('vue-cli-service build --target lib src/main.js')
+  expect(stdout).toMatch('Build complete.')
+
+  expect(project.has('dist/demo.html')).toBe(true)
+  expect(project.has('dist/test-lib.common.js')).toBe(true)
+  expect(project.has('dist/test-lib.umd.js')).toBe(true)
+  expect(project.has('dist/test-lib.umd.min.js')).toBe(true)
+})
+
+test('build as lib without --name and --filename options (default to package name, minus scope)', async () => {
+  const project = await create('build-lib-no-name-and-filename-option-with-scope', defaultPreset)
+  await project.write('package.json', `
+      {
+        "name": "@foo/test-lib"
+      }
+    `)
+  await project.write('src/main.js', `
+      export default { foo: 1 }
+      export const bar = 2
+    `)
+  const { stdout } = await project.run('vue-cli-service build --target lib src/main.js')
+  expect(stdout).toMatch('Build complete.')
+
+  expect(project.has('dist/demo.html')).toBe(true)
+  expect(project.has('dist/test-lib.common.js')).toBe(true)
+  expect(project.has('dist/test-lib.umd.js')).toBe(true)
+  expect(project.has('dist/test-lib.umd.min.js')).toBe(true)
+})
diff --git a/packages/@vue/cli-service/lib/commands/build/resolveLibConfig.js b/packages/@vue/cli-service/lib/commands/build/resolveLibConfig.js
index 8c083d0c65..cda74655f8 100644
--- a/packages/@vue/cli-service/lib/commands/build/resolveLibConfig.js
+++ b/packages/@vue/cli-service/lib/commands/build/resolveLibConfig.js
@@ -21,8 +21,11 @@ module.exports = (api, { entry, name, formats, filename }, options) => {
   const isVueEntry = /\.vue$/.test(entry)
   const libName = (
     name ||
-    api.service.pkg.name ||
-    path.basename(entry).replace(/\.(jsx?|vue)$/, '')
+    (
+      api.service.pkg.name
+        ? api.service.pkg.name.replace(/^@.+\//, '')
+        : path.basename(entry).replace(/\.(jsx?|vue)$/, '')
+    )
   )
   filename = filename || libName
   function genConfig (format, postfix = format, genHTML) {