javascript - 使用 webpack 目标 Node 从 node_modules 导入 css

标签 javascript node.js webpack server-side-rendering

我目前正在构建一个带有服务器端渲染的 React 应用程序。我正在使用一些带有 css 文件的库。当我尝试像这样导入它们时:

import 'leaflet/dist/leaflet.css';

我在 server.js 中收到以下错误:

/my/app/path/node_modules/leaflet/dist/leaflet.css:3
.leaflet-pane,
^

SyntaxError: Unexpected token .
    at createScript (vm.js:74:10)
    at Object.runInThisContext (vm.js:116:10)
    at Module._compile (module.js:533:28)
    at Object.Module._extensions..js (module.js:580:10)
    at Module.load (module.js:503:32)
    at tryModuleLoad (module.js:466:12)
    at Function.Module._load (module.js:458:3)
    at Module.require (module.js:513:17)
    at require (internal/module.js:11:18)
    at Object.__webpack_exports__.a (/my/app/path/server.js:725:18)

导入

import '../../node_modules/leaflet/dist/leaflet.css';

有效。

有什么方法可以配置 webpack 以便我可以正常导入这些 css 文件吗?

这是 server.js 的 webpack 配置:

const nodeExternals = require('webpack-node-externals');
const postcssImport = require('postcss-import');
const cssnext = require('postcss-cssnext');
const cssnano = require('cssnano');

module.exports = {
  entry: './src/server.js',
  output: {
    filename: 'server.js',
    path: __dirname,
  },
  module: {
    rules: [
      {
        test: /\.js$/,
        loader: 'babel-loader',
        exclude: /node_modules/,
        options: {
          presets: [
            'react',
            ['env', {
              modules: false,
              targets: {
                node: process.versions.node,
              },
            }],
          ],
        },
      },
      {
        test: /\.css$/,
        use: [
          'css-loader',
          {
            loader: 'postcss-loader',
            options: {
              plugins: [
                postcssImport,
                cssnext,
                cssnano({
                  safe: true,
                  autoprefixer: false,
                }),
              ],
            },
          },
        ],
      },
      {
        test: /\.png$/,
        use: ['url-loader?limit=100000'],
      },
    ],
  },
  target: 'node',
  externals: [nodeExternals()],
};

最佳答案

这是 webpack-node-externals 的问题,它阻止捆绑位于 node_modules 目录下的所有资源。

您可以使用白名单选项来避免这种行为。

这是来自 documentation 的示例webpack-node-externals:

...
nodeExternals({
   // load non-javascript files with extensions, presumably via loaders
   whitelist: [/\.(?!(?:jsx?|json)$).{1,5}$/i],
}),
...

关于javascript - 使用 webpack 目标 Node 从 node_modules 导入 css,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46051657/

相关文章:

javascript - 导航上没有背景颜色

javascript - 从 jQuery 中的函数返回值

node.js - 使用 Node.js 和 Passport 进行 NativeScript Facebook 身份验证时出现 CORS 问题

javascript - Grunt/NPM Uglify 不喜欢这个 JS 行

angular - TypeError : index_1. X 不是构造函数 - Karma - Jasmine - Webpack

javascript - 如何在 JavaScript 中检索变量的名称

javascript - 数据未完全显示在堆栈栏 Highcharts

javascript - 使用 findOne 更新 mongoDB 文档中的子字段并保存

Django Webpack 加载器破坏 Vue 路由器链接

javascript - 使用 webpack 引用 js 文件