【问题标题】:NodeJS how-to require module which injects a functionNodeJS how-to 需要注入函数的模块
【发布时间】:2016-05-29 00:12:16
【问题描述】:

我正在使用 webpack 捆绑使用 d3 和 d3.slider 模块构建的可视化,但这是一个更普遍的问题 - 我如何 require() 一个模块,该模块使用函数(此处为 d3)修补模块(此处为 d3 d3.slider()) ?

package.json:

{
  "name": "d3_slider_error",
  "version": "0.0.1",
  "description": "",
  "main": "",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "start": "webpack-dev-server"
  },
  "dependencies": {
    "d3": "^3.5.15",
    "d3-slider": "git+ssh://git@github.com:MasterMaps/d3-slider.git",
    "webpack": "^1.9.10",
    "webpack-dev-server": "^1.9.0",
    "html-webpack-plugin": "^1.5.0"
  }
}

webpack.config.js:

var HtmlWebpackPlugin = require('html-webpack-plugin');
var path = require('path');

module.exports = {
    entry: "./src/main.js", // APP_PATH
    output: {
        filename: 'main.js',
        path: path.resolve('./dist') // BUILD_PATH  
    },
    module: {
        loaders: [
            //
        ]
    },
    resolve: {
        modulesDirectories: ['node_modules']
    },
    plugins: [
        new HtmlWebpackPlugin({title : "d3-slider-error"})
    ]
};

src/main.js:

var d3 = require('d3');
require('d3.slider');

var timeSlider = d3.slider();

console.log("Done!");

此日志:TypeError: d3.slider is not a function

【问题讨论】:

  • 这不是使用 webpack 的模块化解决方案
  • 使用 requirejs,您将使用 shim。我对 Webpack 还很陌生,但 this 似乎描述了 Webpack 中 requirejs 的 shim 等价物。

标签: javascript node.js d3.js webpack


【解决方案1】:

我找到了一个丑陋的解决方案,但由于没有其他问题,我将其发布在这里。我将此添加到 package.json 依赖项:

"script-loader": "git+ssh://git@github.com:webpack/script-loader.git"

然后某处,例如入口点(假设 d3.slider 在 node_modules 中):

require("script!d3.slider");

Script-loader 在全局环境中执行一次脚本。应该适用于所有类似的问题、遗留脚本等。完成。

【讨论】:

  • 你是什么意思“然后某处,例如在入口点”
  • 在您在 package.json 中指定为“main”的任何文件中。
猜你喜欢
  • 2012-09-03
  • 1970-01-01
  • 1970-01-01
  • 2017-12-12
  • 1970-01-01
  • 1970-01-01
  • 2017-11-25
  • 2015-02-08
  • 1970-01-01
相关资源
最近更新 更多