npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

qingfengmy-join1

v1.0.3

Published

``` src | |index.js |math.js webpack.config.js package.json ```

Downloads

3

Readme

1. 基本目录

src |
    |index.js
    |math.js
webpack.config.js
package.json
// math.js
export function add(a, b) {
  return a + b;
}
// index.js
import * as math from "./math";

export default { math };
// webpack.config.js
const path = require("path");
module.exports = {
  entry: "./src/index.js",
  mode: "development",
  output: {
    path: path.resolve(__dirname, "dist"),
    filename: "lib.js"
  }
};

打包yarn run build,生成lib.jsdist目录

// lib.js
(function(modules) {})

2. output.library/libraryTarget

需求:在 html 中使用

// webpack.config.js
output: {
    path: path.resolve(__dirname, "dist"),
    filename: "lib.js",
    library: "libmath"
}

上面的配置生效后打出的 lib 如下

var libmath = (function(modules) {})

可以在 html 中直接使用

console.log(libmath.default.math.add(1, 2));

library: 实际是 script 使用时的全局变量名,和他一起出现但有默认值的是 libraryTarget

libraryTarget: 如果不配置 library,就没有 libraryTarget;如果配置了 library,它的默认值就是 var,作用就是生成一个 var 变量。它还有很多值

var: 默认值 var libmath = (function(modules) {}) window: window['libmath'] = (function(modules) {}) global: window["libmath"] = (function(modules) {}) this: this['libmath'] = (function(modules) {}) assign: libmath = (function(modules) {}) amd: define("libmath", [], function() {}) commonjs: exports["libmath"] = (function(modules) {}) commonjs2: module.exports = (function(modules) {}) umd: 都支持

(function webpackUniversalModuleDefinition(root, factory) {
  if (typeof exports === "object" && typeof module === "object")
    module.exports = factory();
  else if (typeof define === "function" && define.amd) define([], factory);
  else if (typeof exports === "object") exports["libmath"] = factory();
  else root["libmath"] = factory();
})(window, function() {
  return /******/ function(modules) {};
});

3. 验证

var/window/global/this/assign 都已经验证过,这里验证剩下的几种。

commonjs

const libmath = require("../dist/lib");
console.log(libmath);

// 结果
{ libmath: Object [Module] { default: { math: [Object] } } }

commonjs2

const libmath = require("../dist/lib");
console.log(libmath);
// 结果
Object [Module] { default: { math: Object [Module] { add: [Getter] } } }

amd

使用 amd 标准需要引入 require 库

<script src="./require.js"></script>
<script src="../dist/lib.js"></script>
<script>
  require(["libmath"], function(libmath) {
    console.log(libmath);
  });
</script>

umd

node 下会报一个错,window 找不到,需要配置 globalObject,值为 this

output: {
    path: path.resolve(__dirname, "dist"),
    filename: "lib.js",
    library: "libmath",
    libraryTarget: "umd",
    globalObject: "this"
}

编译出的结果

(function webpackUniversalModuleDefinition(root, factory) {
	if(typeof exports === 'object' && typeof module === 'object')
		module.exports = factory();
	else if(typeof define === 'function' && define.amd)
		define([], factory);
	else if(typeof exports === 'object')
		exports["libmath"] = factory();
	else
		root["libmath"] = factory();
})(this, function() {})

4. 使用 lodash

// string.js
import _ from "lodash";
export function join(a, b) {
  return _.join([a, b], "-");
}

之前打包的大小是 5kb,加上 lodash 之后打包是 553kb

5. 打包不包括 lodash

externals: {
    lodash: "lodash"
}

6. 使用 libmath

简化代码,只留一个 join

// join.js
import lodash from "lodash";
export function join(arr) {
  console.log("arr", arr, lodash);
  return lodash.join(arr, "|");
}
<script src="https://cdn.bootcss.com/lodash.js/4.17.12-pre/lodash.js"></script>
<script src="../dist/lib.js"></script>
<script>
  console.log(qingfengmyjoin.default.join([1, 2]));
</script>

使用上面的代码,发现会报错,上面的打印发现 lodash 是空,打开 lodash.js 发现他添加的全局对象是_

 if (typeof define == 'function' && typeof define.amd == 'object' && define.amd) {
    // Expose Lodash on the global object to prevent errors when Lodash is
    // loaded by a script tag in the presence of an AMD loader.
    // See http://requirejs.org/docs/errors.html#mismatch for more details.
    // Use `_.noConflict` to remove Lodash from the global object.
    root._ = lodash;

    // Define as an anonymous module so, through path mapping, it can be
    // referenced as the "underscore" module.
    define(function() {
      return lodash;
    });
  }
  // Check for `exports` after `define` in case a build optimizer adds it.
  else if (freeModule) {
    // Export for Node.js.
    (freeModule.exports = lodash)._ = lodash;
    // Export for CommonJS support.
    freeExports._ = lodash;
  }
  else {
    // Export to the global object.
    root._ = lodash;
  }

我们打包时已经把 lodash 排除了,现在需要外部的 lodash,但是 script 标签这种形式引进了的 lodash 的真名是_,那就需要我们在 externals 中配置 root 的值是_

因为上面配置的是 umd,如果这里 lodash 单独配置的话,就需要全部配齐,否则 webpack 打包会报错。改成这样,再打包刷新 html 就 ok 了。

externals: {
    lodash: {
      commonjs: "lodash",
      commonjs2: "lodash",
      amd: "lodash",
      root: "_"
    }
}

7. 发布到 npm

// package.json
"name": "qingfengmy-join1",
"main": "dist/lib.js",