2017-08-02 71 views
1

我在使用webpack動態導入json時遇到問題。 (https://webpack.js.org/api/module-methods/#import-Webpack2 + Typescript2無法動態導入json

保持它顯示了這個錯誤 - TS2307:找不到模塊

包版本..

  • 的WebPack版本:2.7.0

  • 打字稿版本:2.4 .2

  • awesome-typescript-loader:3.2.1

tsconfig.json

{ 
    "compilerOptions": { 
    "outDir": "./dist/", 
    "sourceMap": true, 
    "noImplicitAny": true, 
    "module": "esnext", 
    "moduleResolution": "node", 
    "target": "es6", 
    "jsx": "react", 
    "allowJs": true, 
    "allowSyntheticDefaultImports": true 
    }, 
    "awesomeTypescriptLoaderOptions": { 
    "useBabel": true, 
    "useCache": true 
    }, 
    "exclude": ["node_modules"], 
    "include": [ 
    "./components/**/*", 
    "./core/*", 
    "./pages/*", 
    "./utils/*", 
    "./urls/*", 
    "./translations/**/*", 
    "./main.tsx" 
    ] 
} 

webpack.config.js

const path = require('path'); 
const webpack = require('webpack'); 
const AssetsPlugin = require('assets-webpack-plugin'); 
const pkg = require('./package.json'); 

const isDebug = global.DEBUG === false ? false : !process.argv.includes('--release'); 
const isVerbose = process.argv.includes('--verbose') || process.argv.includes('-v'); 
const useHMR = !!global.HMR; // Hot Module Replacement (HMR) 
const babelConfig = Object.assign({}, pkg.babel, { 
    babelrc: false, 
    cacheDirectory: useHMR, 
}); 

// Webpack configuration (main.js => public/dist/main.{hash}.js) 
// http://webpack.github.io/docs/configuration.html 
const config = { 

    // The base directory for resolving the entry option 
    context: __dirname, 

    // The entry point for the bundle 
    entry: [ 
    // require('babel-polyfill'), 
    './main.tsx' 
    ], 

    // Options affecting the output of the compilation 
    output: { 
    path: path.resolve(__dirname, './public/dist'), 
    publicPath: '/dist/', 
    filename: isDebug ? '[name].js?[hash]' : '[name].[hash].js', 
    chunkFilename: isDebug ? '[id].js?[chunkhash]' : '[id].[chunkhash].js', 
    sourcePrefix: ' ', 
    }, 

    // Developer tool to enhance debugging, source maps 
    // http://webpack.github.io/docs/configuration.html#devtool 
    devtool: isDebug ? 'inline-source-map' : false, 

    // What information should be printed to the console 
    stats: { 
    colors: true, 
    reasons: isDebug, 
    hash: isVerbose, 
    version: isVerbose, 
    timings: true, 
    chunks: isVerbose, 
    chunkModules: isVerbose, 
    cached: isVerbose, 
    cachedAssets: isVerbose, 
    }, 

    // The list of plugins for Webpack compiler 
    plugins: [ 
    new webpack.DefinePlugin({ 
     'process.env.NODE_ENV': isDebug ? '"development"' : '"production"', 
     __DEV__: isDebug, 
    }), 
    // Emit a JSON file with assets paths 
    // https://github.com/sporto/assets-webpack-plugin#options 
    new AssetsPlugin({ 
     path: path.resolve(__dirname, './public/dist'), 
     filename: 'assets.json', 
     prettyPrint: true, 
    }), 
    ], 

    // Options affecting the normal modules 
    module: { 
    rules: [ 
     { 
     test: /\.tsx?$/, 
     include: [ 
      path.resolve(__dirname, './components'), 
      path.resolve(__dirname, './core'), 
      path.resolve(__dirname, './pages'), 
      path.resolve(__dirname, './apis'), 
      path.resolve(__dirname, './urls'), 
      path.resolve(__dirname, './translations'), 
      path.resolve(__dirname, './main') 
     ], 
     loader: 'awesome-typescript-loader' 
     }, 
     { 
     test: /\.css/, 
     use: [{loader: 'style-loader'}, {loader: 'css-loader', options: 
      { 
      sourceMap: isDebug, 
      // CSS Modules https://github.com/css-modules/css-modules 
      modules: true, 
      localIdentName: isDebug ? '[name]_[local]_[hash:base64:3]' : '[hash:base64:4]', 
      // CSS Nano http://cssnano.co/options/ 
      minimize: !isDebug, 
      }}, 
      // {loader: 'postcss-loader'} 
      ], 
     }, 
     { 
     test: /\.(png|jpg|jpeg|gif|svg|woff|woff2)$/, 
     loader: 'url-loader?limit=10000', 
     }, 
     { 
     test: /\.(eot|ttf|wav|mp3)$/, 
     loader: 'file-loader', 
     }, 
    ], 
    }, 

    externals: { 
    react: 'React' 
    }, 

    resolve: { 
    extensions: ['.js', '.ts', '.tsx'] 
    } 
}; 

// Optimize the bundle in release (production) mode 
if (!isDebug) { 
    config.plugins.push(new webpack.optimize.UglifyJsPlugin({ compress: { warnings: isVerbose }, sourceMap: isDebug })); 
    config.plugins.push(new webpack.optimize.AggressiveMergingPlugin()); 
} 

// Hot Module Replacement (HMR) + React Hot Reload 
if (isDebug && useHMR) { 
    babelConfig.plugins.unshift('react-hot-loader/babel'); 
    config.entry.unshift('react-hot-loader/patch', 'webpack-hot-middleware/client'); 
    config.plugins.push(new webpack.HotModuleReplacementPlugin()); 
    config.plugins.push(new webpack.NoEmitOnErrorsPlugin()); 
} 

module.exports = config; 

custom.d.ts

declare module "*.json" { 
    const value: any; 
    export default value; 
} 

我的錯誤代碼

// TS2307: Cannot find module './test.json'. 
import('./test.json').then(_ => { 
    console.log(_ 
}) 

// but these codes work 
import './test.json' 
import('./test.js').then(_ => { console.log(_)}) 

我儘可能地搜索了問題。但似乎沒有人遇到過這個問題。

這是我找到的相關鏈接。

如果有人有任何線索,請告訴我。

回答

0

您確定您的custom.d.ts位於編譯中包含的文件夾中嗎?我相信只有在node_modules/@types的包裝中才會包含類型,如果它們不屬於tsconfig.json"files""include"屬性。