安装在 node_modules 中时无法加载 vue 文件

Posted

技术标签:

【中文标题】安装在 node_modules 中时无法加载 vue 文件【英文标题】:cannot load vue file when installed in node_modules 【发布时间】:2018-08-30 22:16:02 【问题描述】:

我想使用第 3 方插件,但无法使用我的 webpack 配置加载它,因为 vue-loader 配置不正确(我认为) 导入项目文件夹中我自己的组件是可行的。

import Paginate from 'vuejs-paginate/src/components/Paginate.vue'

当尝试从包中导入 .vue 文件时,我收到此错误:

(function (exports, require, module, __filename, __dirname)  <template>

SyntaxError: Unexpected token <

所以我认为如果我导入 node_modules 文件夹中的包,vue-loader 不起作用。

这是我的 webpack 配置:

const path = require('path')
const webpack = require('webpack')
const vueConfig = require('./vue-loader.config')
const ExtractTextPlugin = require('extract-text-webpack-plugin')
const FriendlyErrorsPlugin = require('friendly-errors-webpack-plugin')
const nodeExternals = require('webpack-node-externals')

const isProd = process.env.NODE_ENV === 'production'

module.exports = 
  devtool: isProd
    ? false
    : '#cheap-module-source-map',
  output: 
    path: path.resolve(__dirname, '../dist'),
    publicPath: '/dist/',
    filename: '[name].[chunkhash].js'
  ,
  resolve: 
    alias: 
      'public': path.resolve(__dirname, '../public')
    
  ,
  module: 
    noParse: /es6-promise\.js$/, // avoid webpack shimming process
    rules: [
      
        test: /\.vue$/,
        loader: 'vue-loader',
        options: vueConfig
      ,
      
        test: /\.js$/,
        loader: 'babel-loader',
        exclude: /node_modules\/,
        query: 
          plugins: ['transform-runtime']
        
      ,
      
        test: /\.(png|jpg|gif|svg)$/,
        loader: 'url-loader',
        options: 
          limit: 10000,
          name: '[name].[ext]?[hash]'
        
      ,
      
        test: /\.css$/,
        use: isProd
          ? ExtractTextPlugin.extract(
              use: 'css-loader?minimize',
              fallback: 'vue-style-loader'
            )
          : ['vue-style-loader', 'css-loader']
      
    ]
  ,
  performance: 
    maxEntrypointSize: 300000,
    hints: isProd ? 'warning' : false
  ,
  plugins: isProd
    ? [
        new webpack.optimize.UglifyJsPlugin(
          compress:  warnings: false 
        ),
        new webpack.optimize.ModuleConcatenationPlugin(),
        new ExtractTextPlugin(
          filename: 'common.[chunkhash].css'
        )
      ]
    : [
        new FriendlyErrorsPlugin()
      ]


vue-loader.config.js

module.exports = 
  extractCSS: process.env.NODE_ENV === 'production',
  preserveWhitespace: false,
  postcss: [
    require('autoprefixer')(
      browsers: ['last 3 versions']
    )
  ]

node_modules 被排除在外,但不应该只为 babel-loader 排除,而不是 vue 加载器本身吗?

----编辑

我正在使用s-s-r,作者本人在此issue中声明

@johnRivs 非常感谢。 @sbefort 您可以通过以下方式导入库 从'vuejs-paginate/src/components/Paginate'导入分页;为了 固态硬盘。有任何问题请重新打开此问题。

【问题讨论】:

【参考方案1】:

你不想进入 NPM 包内部。

当你这样做时:

import Paginate from 'vuejs-paginate/src/components/Paginate.vue'

注意你依赖于vuejs-paginate 的内部结构(src 文件夹是否存在?)等等。

正确的方法是安装包并导入包暴露的内容。


例如,要安装,在 shell 上运行:

npm install vuejs-paginate --save

然后在您的代码中,导入并使用如下:

import Paginate from 'vuejs-paginate'
Vue.component('paginate', Paginate)

WebPack 将独立于vue-loader 处理其余的事情(至少就vuejs-paginat 本身而言)。而且,是的,vue-loader 应该排除 node_modules,因为您不希望它处理您导入的每个包的每个 soucve .vue 文件。

【讨论】:

我正在使用 s-s-r,github.com/lokyoung/vuejs-paginate/issues/44 - 作者自己声明 @sbefort 您可以通过 import Paginate from 'vuejs-paginate/src/components/Paginate' 来导入库;用于 s-s-r。 @Ohgodwhy 感谢您的建设性评论,但我确实阅读了它,不仅是手册,还阅读了问题,因为它对我不起作用,我认为这是我的 webpack conf。 @user345234674567 在您的问题中,您说您包含扩展名.vue,例如:import Paginate from 'vuejs-paginate/src/components/Paginate.vue'。你试过没有它吗,比如import Paginate from 'vuejs-paginate/src/components/Paginate'; @acdcjunior 是的,我已经尝试过了,根本找不到模块 - 错误:无法从'/home/找到模块'vuejs-paginate/src/components/Paginate'用户/s-s-r/dist' npm install --save vuejs-paginate了吗?

以上是关于安装在 node_modules 中时无法加载 vue 文件的主要内容,如果未能解决你的问题,请参考以下文章

将 Vue.js 安装到 Laravel 后无法加载示例组件

将 NSMutableArray 加载到 iPhone 的表视图中时无法识别的选择器

当构建二进制文件包含在 gitignore 中时构建分布式 Vue CLI 项目?

即使在全新安装和 node_modules 重新安装后,Svelte run dev 也无法正常工作

路由器视图未加载内容,无法安装模板

即使在删除 node_modules 和 npm install 后安装新包时也无法修复编译错误