簡體   English   中英

找不到模塊“模塊”-Rewire.js

[英]Cannot find module "module" - Rewire.js

我正在嘗試將rewire與我的 Karma (Webpack + Typescript) 單元測試一起使用。 我的單元測試寫在Typescript,捆綁Webpack,然后用Karma運行。 我不斷收到錯誤:

PhantomJS 2.1.1 (Windows 7 0.0.0) ERROR
  Error: Cannot find module "module"
  at src/myTest.spec.ts:187

我查看了 Rewire 的代碼,問題出在這條線上

var Module = require("module"),

我知道有一個Webpack Rewire插件,但是當我使用它時,我遇到了與 issue 中已經報告的相同的問題

我所有不使用rewire的測試都可以正常工作。

這是我的測試文件:

import rewire = require("rewire");
const decorators = rewire("./decorators");

describe('something', () => {
    it('should do something', () => {
        decorators.__set__('Test', () => 'hello');
        // In know this is pointless, but it's just to make sure that rewire works.
        expect(decorators.Test).toBe('hello');
    });
});

這是我的 webpack 配置:

var webpack = require('webpack');
var path = require('path');
var fs = require('fs');

var nodeModules = {};
fs.readdirSync('node_modules')
    .filter(function (x) {
        return ['.bin'].indexOf(x) === -1;
    })
    .forEach(function (mod) {
        nodeModules[mod] = 'commonjs ' + mod;
    });

// Our Webpack Defaults
var webpackConfig = {
    entry: './src/index.ts',
    target: 'node',
    module: {
        loaders: [
            {test: /\.ts$/, loaders: ['ts-loader'], exclude: /node_modules/}
        ]
    },
    plugins: [
        new webpack.BannerPlugin({banner: 'require("source-map-support").install();', raw: true, entryOnly: false}),
        new webpack.optimize.UglifyJsPlugin({sourceMap: true}),
        new webpack.optimize.AggressiveMergingPlugin(),
    ],
    output: {
        path: path.resolve(__dirname, './dist'),
        filename: 'index.js',
        sourceMapFilename: 'index.map'
    },
    externals: nodeModules,
    devtool: 'source-map',
    resolve: {
        extensions: ['.ts', '.js']
    }
};

module.exports = webpackConfig;

這是我的karma.conf.js的(相關的)部分:

frameworks: ['jasmine'],
files: [
    'src/**/*.spec.ts',
    'test/**/*.ts'
],
exclude: [],
webpack: {
    devtool: webpackConfig.devtool,
    module: webpackConfig.module,
    resolve: webpackConfig.resolve,
},
webpackMiddleware: {
    quiet: true,
    stats: {
        colors: true
    }
},
preprocessors: {
    'src/**/*.spec.ts': ['webpack', 'sourcemap'],
    'test/**/*.ts': ['webpack', 'sourcemap']
},

我想你寫錯了導入重新連接= require(“重新連接”);

它應該是

import rewire from 'rewire' 

對於ES6或

const rewire = require('rewire')

對於ES5

重寫 package.json 中的腳本對我有用:

"test": "ts-node -O '{\"module\":\"commonjs\"}' node_modules/jest/bin/jest.js"

如果你得到錯誤

SyntaxError: JSON 中的意外標記 ' 在 position 0

這為我修好了:

ts-node -O \"{\\\"module\\\":\\\"commonjs\\\"}\" node_modules/jest/bin/jest.js

這不是我的主意。 請參閱Github 問題的答案以獲得很好的解釋。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM