Webpack捆绑问题“第三方包中的require(./ ...”)

问题描述 投票:1回答:1

我正在写一个需要代码编辑器的Electron应用程序。我使用react作为渲染器,因此我决定使用react-ace。 qazxsw poi

一切正常,直到我试图添加emmet。从我发现的,我必须导入emmet包本身。所以在我的组件上渲染编辑器我添加了导入

https://github.com/securingsincity/react-ace

捆绑工作,但当我运行应用程序时,我得到以下控制台错误:

未捕获错误:找不到模块'./utils/common'

有问题的代码行可以在/node_modules/emmet/lib/emmet.js第10行找到

var utils = require('./ utils / common');

我正在使用带有打字稿的webpack。

的package.json

import 'emmet';
import * as React from 'react';
import AceEditor from 'react-ace';
import 'brace/ext/emmet';
import 'brace/mode/html';
import 'brace/mode/css';
import 'brace/theme/idle_fingers';
....

webpack.common.config.js

{
   ....
  "devDependencies": {
    "@types/electron-devtools-installer": "^2.2.0",
    "@types/history": "^4.7.2",
    "@types/jsdom": "^12.2.3",
    "@types/ncp": "^2.0.1",
    "@types/node": "^11.11.2",
    "@types/react": "^16.8.7",
    "@types/react-dom": "^16.8.2",
    "@types/react-redux": "^7.0.3",
    "@types/react-router-dom": "^4.3.1",
    "@types/redux-logger": "^3.0.7",
    "@types/styled-components": "^4.1.12",
    "@types/webpack-env": "^1.13.9",
    "brace": "^0.11.1",
    "concurrently": "^4.1.0",
    "connected-react-router": "^6.3.1",
    "copy-webpack-plugin": "^5.0.0",
    "cross-env": "^5.2.0",
    "css-loader": "^2.1.0",
    "electron": "^4.0.5",
    "electron-builder": "^20.38.4",
    "electron-devtools-installer": "^2.2.4",
    "electron-log": "^3.0.1",
    "electron-updater": "^4.0.6",
    "emmet": "^1.6.3",
    "history": "^4.7.2",
    "html-webpack-plugin": "^3.2.0",
    "i18next": "^15.0.6",
    "jsdom": "^14.0.0",
    "mini-css-extract-plugin": "^0.5.0",
    "moment": "^2.24.0",
    "ncp": "^2.0.0",
    "node-sass": "^4.11.0",
    "optimize-css-assets-webpack-plugin": "^5.0.1",
    "prettier": "^1.15.3",
    "react": "^16.8.4",
    "react-ace": "^6.4.0",
    "react-dom": "^16.8.4",
    "react-hot-loader": "^4.8.0",
    "react-i18next": "^10.4.1",
    "react-redux": "^6.0.1",
    "react-router": "^4.3.1",
    "react-router-dom": "^4.3.1",
    "react-test-renderer": "^16.7.0",
    "redux": "^4.0.1",
    "redux-logger": "^3.0.6",
    "redux-thunk": "^2.3.0",
    "reselect": "^4.0.0",
    "rxjs": "^6.4.0",
    "sass-loader": "^7.1.0",
    "sb-fs": "^3.0.0",
    "style-loader": "^0.23.1",
    "styled-components": "^4.1.3",
    "ts-loader": "^5.3.3",
    "tslint": "^5.13.0",
    "typescript": "^3.3.3333",
    "typescript-plugin-styled-components": "^1.3.0",
    "webpack": "^4.29.5",
    "webpack-bundle-analyzer": "^3.0.3",
    "webpack-cli": "^3.2.3",
    "webpack-dev-server": "^3.1.14",
    "webpack-merge": "^4.1.5"
  },
  "browserslist": "electron 1.6"
}

webpack.renderer.prod.config.js

module.exports = {
    module: {
        rules: [
            {
                test: /\.tsx?$/,
                exclude: /node_modules/,
                loader: 'ts-loader',
            },
            // https://github.com/ashtuchkin/iconv-lite/issues/205
            {
                test: /node_modules[\/\\](iconv-lite)[\/\\].+/,
                resolve: {
                    aliasFields: ['main']
                }
            },
        ]
    },
    resolve: {
        extensions: ['.js', '.ts', '.tsx', '.json']
    },
    output: {
        path: path.resolve(__dirname, '..', 'dist'),
    },
    plugins: [
        new webpack.EnvironmentPlugin(['NODE_ENV', 'PORT', 'HOT']),
    ]
};
javascript webpack emmet
1个回答
2
投票

尝试使用module.exports = merge.smart(baseConfig, { devtool: 'none', mode: 'development', target: 'electron-renderer', entry: [ 'react-hot-loader/patch', `webpack-dev-server/client?http://localhost:${port}/`, 'webpack/hot/only-dev-server', path.join(__dirname, '..', 'src', 'app', 'renderer', 'index.tsx'), ], output: { publicPath, filename: 'renderer.dev.js' }, module: { rules: [ { test: /\.tsx?$/, exclude: /node_modules/, loader: 'ts-loader', options: { getCustomTransformers: () => ({before: [styledComponentsTransformer]}), } }, { test: /\.(s?css|)$/, use: [ { loader: 'style-loader' }, { loader: 'css-loader', }, { loader: 'sass-loader' } ] }, { test: /node_modules[\/\\](emmet)[\/\\].+/, resolve: { modules: ['node_modules/emmet/lib'], } } ] }, plugins: [ new webpack.HotModuleReplacementPlugin({ multiStep: true }), ], node: { __dirname: false, }, devServer: { port, publicPath, compress: true, noInfo: true, stats: 'errors-only', inline: true, lazy: false, hot: true, headers: {'Access-Control-Allow-Origin': '*'}, contentBase: path.join(__dirname), watchOptions: { aggregateTimeout: 300, ignored: /node_modules/, poll: 100 }, historyApiFallback: { verbose: true, disableDotRule: false }, before() { if (process.env.HOT) { console.log('Building main...'); spawn('npm', ['run', 'dev-main'], { shell: true, env: process.env, stdio: 'inherit' }) .on('close', code => process.exit(code)) .on('error', spawnError => console.error(spawnError)); } } } }); 包。 https://github.com/emmetio/expand-abbreviation是旧包装,不再支持

© www.soinside.com 2019 - 2024. All rights reserved.