2017-12-23 21 views
0

mocha-webpack v1.0.1, 노드 v6.10을 사용하여 단위 테스트를하고 있습니다. 그러나 webpack이 @을 구문 분석 할 수없는 노드 모듈 중 하나에서 오류가 발생합니다. 이 라이브러리는 다른 개발 환경에서 제대로 실행되는 내부 라이브러리입니다. 그래서, 왜 이런 일이 일어나고 있는지 혼란 스럽네요. 왜냐하면 당신이 node_module에있는 라이브러리가 일종의 자립적이라고 생각할 것이고 자신을 파싱하는 방법을 알게 될 것이고 다른 환경에서 일하는 것으로 확인 될 것이기 때문입니다. 내가 @ 믿는다Webpack 2 - node_module 구문 분석 문제

Error in ./~/abc-components/src/abc-theme/index.scss 

    Module parse failed: /path/to/app/node_modules/abc-components/src/abc-theme/index.scss Unexpected character '@' (1:0) 
    You may need an appropriate loader to handle this file type. 
    | @charset "UTF-8"; 
    | @import "abc-variables"; 
    | @import "alert"; 

은 우리가 라이브러리에있는 모듈 경로를 해결하기 위해 사용하는 별칭입니다. 이 후 tutorial 이후에 설치 프로그램을 모델링했습니다. package.json에서 :

"unit": "BABEL_ENV=test mocha-webpack --webpack-config build/webpack.test.conf.js --require test/unit/.setup src/**/*.spec.js --recursive --watch" 

내가 시도한 몇 가지 의견을 포함 build/webpack.test.conf.js 설정,에서 :

var path = require('path') 
var webpack = require('webpack') 
var utils = require('./utils') 
var config = require('../config') 
// var nodeExternals = require('webpack-node-externals'); 

function resolve(dir) { 
    return path.join(__dirname, '..', dir) 
} 

module.exports = { 
    entry: { 
    app: './src/main.js' 
    }, 
    resolve: { 
    modules: [path.resolve('./src'), "node_modules"], 
    extensions: ['.js', '.vue', '.json', '.ts'], 
    alias: { 
     'vue$': 'vue/dist/vue.esm.js', 
     '@': resolve('src') 
    } 
    }, 
    // externals: [nodeExternals()], 
    output: { 
    path: config.build.assetsRoot, 
    filename: '[name].js', 
    publicPath: process.env.NODE_ENV === 'production' 
     ? config.build.assetsPublicPath 
     : config.dev.assetsPublicPath 
    }, 
    // plugins: [ 
    // new webpack.optimize.CommonsChunkPlugin({ 
    // name: "vendor", 
    // filename: "vendor.js", 
    // minChunks: function (module) { 
    //  // This prevents stylesheet resources with the .css or .scss extension 
    //  // from being moved from their original chunk to the vendor chunk 
    //  if(module.resource && (/^.*\.(css|scss)$/).test(module.resource)) { 
    //  return false; 
    //  } 
    //  return module.context && module.context.indexOf("node_modules") !== -1; 
    // } 
    // }), 
    // new webpack.DefinePlugin({ 
    //  'process.env': require('../config/test.env') 
    // }) 
    // ], 
    module: { 
    loaders: [ 
     { 
     test: /\.(js|vue)$/, 
     // loader: 'eslint-loader', 
     // enforce: 'pre', 
     include: [resolve('src'), resolve('test'), resolve('node_modules')], 
     /* options: { 
      formatter: require('eslint-friendly-formatter') 
     } */ 
     }, 
     { 
     test: /\.pug$/, 
     loader: 'pug-loader' 
     }, 
     { 
     test: /\.vue$/, 
     loader: 'vue-loader' 
     // options: vueLoaderConfig 
     }, 
     { 
     test: /\.ts$/, 
     loader: "awesome-typescript-loader", 
     include: [resolve('src'), resolve('test')] 
     }, 
     { 
     test: /\.js$/, 
     loader: 'babel-loader', 
     query: { 
      presets: ['es2015'] 
     }, 
     include: [resolve('src'), resolve('test')] 
     // exclude: /node_modules/ 
     }, 
     { 
     test: /\.(mp3|wav)(\?.*)?$/, 
     loader: 'url-loader', 
     options: { 
      limit: 10000, 
      name: utils.assetsPath('audio/[name].[hash:7].[ext]') 
     } 
     }, 
     { 
     test: /\.(png|jpe?g|gif|svg)(\?.*)?$/, 
     loader: 'url-loader', 
     options: { 
      limit: 10000, 
      name: utils.assetsPath('img/[name].[hash:7].[ext]') 
     } 
     }, 
     { 
     test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/, 
     loader: 'url-loader', 
     options: { 
      limit: 10000, 
      name: utils.assetsPath('fonts/[name].[hash:7].[ext]') 
     } 
     } 
    ] 
    }, 
    resolveLoader: { 
    alias: { 
     // necessary to to make lang="scss" work in test when using vue-loader's ?inject option 
     // see discussion at https://github.com/vuejs/vue-loader/issues/724 
     'scss-loader': 'sass-loader' 
    } 
    } 
} 

답변

0

로더에서 설정 다음 포함합니다.

module: { 
loaders: [ 
    { 
     test: /\.(scss|sass)$/i, 
     include: [ 
      path.resolve(__dirname, 'node_modules'), 
      path.resolve(__dirname, 'path/to/imported/file/dir'), <== This solved the issue 
     ], 
     loaders: ["css", "sass"] 
    }, 
] 

},